]> git.tdb.fi Git - libs/core.git/blobdiff - source/utils.cpp
Add rename function
[libs/core.git] / source / utils.cpp
index 2f7e4d704f35b1ee9cebe5dc150c654c5d15ef70..8f06757bda2227f69aa075acc045f1046dba1ce6 100644 (file)
@@ -6,6 +6,7 @@ Distributed under the LGPL
 */
 
 #include <cerrno>
+#include <cstdio>
 #include <msp/core/except.h>
 #ifndef WIN32
 #include <fnmatch.h>
@@ -30,6 +31,12 @@ string basename(const Path &p)
 
 Path dirname(const Path &p)
 {
+       if(p.size()==1)
+       {
+               if(p.is_absolute())
+                       return p;
+               return ".";
+       }
        return p.subpath(0, p.size()-1);
 }
 
@@ -41,7 +48,7 @@ string basepart(const string &fn)
 
 string extpart(const string &fn)
 {
-       unsigned dot=fn.rfind('.');
+       string::size_type dot=fn.rfind('.');
        if(dot==string::npos)
                return string();
        return fn.substr(dot);
@@ -131,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)