]> git.tdb.fi Git - libs/core.git/blobdiff - source/utils.cpp
strutils.h -> strings/utils.h
[libs/core.git] / source / utils.cpp
index a7037ce33640a5d876c17ba16430443a484e884c..5c7d6a230803bcaf47c08b9e43b21aaeb2e55ae6 100644 (file)
@@ -1,8 +1,15 @@
+/*
+This file is part of libmsppath
+Copyright © 2006  Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
 #include <dirent.h>
 #include <sys/stat.h>
 #include <errno.h>
+#ifndef WIN32
 #include <fnmatch.h>
-#include <msp/strutils.h>
+#endif
+#include <msp/strings/utils.h>
 #include "path.h"
 #include "utils.h"
 
@@ -48,6 +55,14 @@ Path fix_case(const Path &path)
        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;
@@ -144,7 +159,39 @@ Filename splitext(const string &fn)
 
 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