X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Futils.cpp;h=9a9802524399e53c8b21e723764f939a6fd9f8c1;hp=a34dd4e54ca86d6baf72a877cea30d6daa959c91;hb=7264384ae4dc1adaf861750516030826a8c91645;hpb=9ef362fabde5092288a8f59e6dae503c83a9462c diff --git a/source/fs/utils.cpp b/source/fs/utils.cpp index a34dd4e..9a98025 100644 --- a/source/fs/utils.cpp +++ b/source/fs/utils.cpp @@ -1,5 +1,7 @@ #include -#ifndef WIN32 +#ifdef WIN32 +#include +#else #include #endif #include @@ -129,14 +131,24 @@ Path realpath(const Path &path) void rename(const Path &from, const Path &to) { +#ifdef WIN32 + if(!MoveFileEx(from.c_str(), to.c_str(), MOVEFILE_REPLACE_EXISTING)) + throw system_error("MoveFileEx"); +#else if(::rename(from.str().c_str(), to.str().c_str())==-1) throw system_error("rename"); +#endif } void unlink(const Path &path) { +#ifdef WIN32 + if(!DeleteFile(path.c_str())) + throw system_error("DeleteFile"); +#else if(::unlink(path.str().c_str())==-1) throw system_error("unlink"); +#endif } Path relative(const Path &path, const Path &base) @@ -154,6 +166,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();