Throw an exception for nonsensical arguments in some FS functions
authorMikko Rasa <tdb@tdb.fi>
Fri, 3 May 2013 09:47:51 +0000 (12:47 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 3 May 2013 09:47:51 +0000 (12:47 +0300)
source/fs/utils.cpp
source/fs/utils.h

index 2bfd1bf3ff4c63d9152084fe1ffdc0b802223aa5..ed1ca0ab27c3e3c14070b88822e50cc742ca067c 100644 (file)
@@ -71,6 +71,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 +99,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) ;
index a52e37d8ed6f3321c748d5df793ce58c77b700e3..e518d35cf225da8e38692e5b09dffe2d21793af5 100644 (file)
@@ -35,14 +35,15 @@ void unlink(const Path &path);
 /// Renames a file.  Existing file, if any, is overwritten.
 void rename(const Path &from, const Path &to);
 
-/// Makes a path relative to some base path.  That is, base/result==path.
+/** Makes a path relative to some base path.  That is, base/result==path.  Both
+paths must be either absolute or relative. */
 Path relative(const Path &path, const Path &base);
 
 /// Returns the longest prefix shared by both paths.
 Path common_ancestor(const Path &, const Path &);
 
 /** Determines how many levels a path is below another.  Returns -1 if path is
-not a descendant of parent. */
+not a descendant of parent.  Both paths must be either absolute or relative. */
 int descendant_depth(const Path &path, const Path &parent);
 
 } // namespace FS