From: Mikko Rasa Date: Fri, 3 May 2013 09:47:51 +0000 (+0300) Subject: Throw an exception for nonsensical arguments in some FS functions X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=c4bebb877ec98d518bf02152ca81930e18eda6a7;p=libs%2Fcore.git Throw an exception for nonsensical arguments in some FS functions --- diff --git a/source/fs/utils.cpp b/source/fs/utils.cpp index 2bfd1bf..ed1ca0a 100644 --- a/source/fs/utils.cpp +++ b/source/fs/utils.cpp @@ -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) ; diff --git a/source/fs/utils.h b/source/fs/utils.h index a52e37d..e518d35 100644 --- a/source/fs/utils.h +++ b/source/fs/utils.h @@ -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