X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Futils.cpp;h=1da18591b1c87119c2fccd0012898af78c5e3412;hp=d34a750903a45dd64864e11f56cd48947a097fb9;hb=e4584bf621f6ef457a944c7604888b4132ad1706;hpb=19edaf3b45bc4c23459fc8ddd552dcfa33eecc71 diff --git a/source/fs/utils.cpp b/source/fs/utils.cpp index d34a750..1da1859 100644 --- a/source/fs/utils.cpp +++ b/source/fs/utils.cpp @@ -1,10 +1,8 @@ #include -#include #ifndef WIN32 -#include -#else -#include +#include #endif +#include #include #include "dir.h" #include "path.h" @@ -114,8 +112,7 @@ Path realpath(const Path &path) Path next = real/queue.front(); queue.pop_front(); - struct stat st = lstat(next); - if(S_ISLNK(st.st_mode)) + if(is_link(next)) { if(++n_links>64) throw runtime_error("too many symbolic links"); @@ -157,6 +154,16 @@ Path relative(const Path &path, const Path &base) return result; } +Path common_ancestor(const Path &path1, const Path &path2) +{ + Path::Iterator i = path1.begin(); + Path::Iterator j = path2.begin(); + Path result; + for(; (i!=path1.end() && j!=path2.end() && *i==*j); ++i, ++j) + result /= *i; + return result; +} + int descendant_depth(const Path &path, const Path &parent) { Path::Iterator i = path.begin();