*/
#include <cerrno>
+#include <cstdio>
#include <msp/core/except.h>
#ifndef WIN32
#include <fnmatch.h>
Path dirname(const Path &p)
{
+ if(p.size()==1)
+ {
+ if(p.is_absolute())
+ return p;
+ return ".";
+ }
return p.subpath(0, p.size()-1);
}
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);
#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)
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