]> git.tdb.fi Git - libs/core.git/blobdiff - source/utils.cpp
Add descendant_depth function
[libs/core.git] / source / utils.cpp
index 22fe1acab7f1a2bd2293204cbcd0d70152366c77..4036225a0f2af593584931d1205fe64aeab82199 100644 (file)
@@ -6,6 +6,7 @@ Distributed under the LGPL
 */
 
 #include <cerrno>
+#include <cstdio>
 #include <msp/core/except.h>
 #ifndef WIN32
 #include <fnmatch.h>
@@ -137,6 +138,12 @@ Path realpath(const Path &path)
 #endif
 }
 
+void rename(const Path &from, const Path &to)
+{
+       if(::rename(from.str().c_str(), to.str().c_str())==-1)
+               throw SystemError("rename failed", errno);
+}
+
 void unlink(const Path &path)
 {
        if(::unlink(path.str().c_str())==-1)
@@ -158,5 +165,21 @@ Path relative(const Path &path, const Path &base)
        return result;
 }
 
+int descendant_depth(const Path &path, const Path &parent)
+{
+       Path::Iterator i=path.begin();
+       Path::Iterator j=parent.begin();
+       for(; (i!=path.end() && j!=parent.end() && *i==*j); ++i, ++j) ;
+
+       if(j!=parent.end())
+               return -1;
+       
+       int result = 0;
+       for(; i!=path.end(); ++i)
+               ++result;
+
+       return result;
+}
+
 } // namespace FS
 } // namespace Msp