return result;
}
+/**
+Creates the given directory and any parent directories if needed.
+
+@param path The path to create
+@param mode Access mode for new directories
+
+@return 0 on success, -1 on error
+*/
int mkpath(const Path &path, int mode)
{
Path p;
return result;
}
-#ifndef WIN32
int fnmatch(const string &pat, const Path &fn)
{
+#ifdef WIN32
+ return -1;
+#else
return ::fnmatch(pat.c_str(), fn.str().c_str(), FNM_PATHNAME);
-}
#endif
+}
+
+Path relative(const Path &path, const Path &base)
+{
+ Path::iterator i=path.begin();
+ Path::iterator j=base.begin();
+ for(; (i!=path.end() && j!=base.end() && *i==*j); ++i,++j);
+
+ Path result;
+ for(; j!=base.end(); ++j)
+ result/="..";
+ for(; i!=path.end(); ++i)
+ result/=*i;
+
+ return result;
+}
+
+/**
+Extracts the basename from the given path. Same thing as Path::Path(p)[-1],
+but faster.
+*/
+string basename(const std::string &p);
+{
+ unsigned slash=p.rfind(DIRCHAR);
+ if(slash==string::npos)
+ return p;
+ else
+ return p.substr(slash+1);
+}
} // namespace Path
} // namespace Msp