]> git.tdb.fi Git - libs/core.git/blobdiff - source/fs/utils.cpp
Remove deprecated things
[libs/core.git] / source / fs / utils.cpp
index 2bfd1bf3ff4c63d9152084fe1ffdc0b802223aa5..a2fe40be72ee6f39eef6909e576c5703fe9787da 100644 (file)
@@ -9,11 +9,13 @@ namespace FS {
 
 string basename(const Path &p)
 {
-       return p[-1];
+       return p.empty() ? string() : p[-1];
 }
 
 Path dirname(const Path &p)
 {
+       if(p.empty())
+               return p;
        if(p.size()==1)
        {
                if(p.is_absolute())
@@ -43,7 +45,7 @@ Path fix_case(const Path &path)
        Path result;
        for(Path::Iterator i=path.begin(); i!=path.end(); ++i)
        {
-               if(!found || *i=="/")
+               if(!found || (result.empty() && (*i=="/" || *i==".")))
                        result /= *i;
                else
                {
@@ -71,6 +73,9 @@ Path fix_case(const Path &path)
 
 Path relative(const Path &path, const Path &base)
 {
+       if(path.is_absolute()!=base.is_absolute())
+               throw invalid_argument("FS::relative");
+
        Path::Iterator i = path.begin();
        Path::Iterator j = base.begin();
        for(; (i!=path.end() && j!=base.end() && *i==*j); ++i, ++j) ;
@@ -96,6 +101,9 @@ Path common_ancestor(const Path &path1, const Path &path2)
 
 int descendant_depth(const Path &path, const Path &parent)
 {
+       if(path.is_absolute()!=parent.is_absolute())
+               throw invalid_argument("FS::descendant_depth");
+
        Path::Iterator i = path.begin();
        Path::Iterator j = parent.begin();
        for(; (i!=path.end() && j!=parent.end() && *i==*j); ++i, ++j) ;