isInDir() / isDirOrInDir(): Use std::string_view

This commit is contained in:
Eelco Dolstra 2021-12-02 14:16:05 +01:00
parent be64fb9b51
commit e1a0359b59
2 changed files with 10 additions and 8 deletions

View file

@ -196,16 +196,16 @@ std::string_view baseNameOf(std::string_view path)
}
bool isInDir(const Path & path, const Path & dir)
bool isInDir(std::string_view path, std::string_view dir)
{
return path[0] == '/'
&& string(path, 0, dir.size()) == dir
return path.substr(0, 1) == "/"
&& path.substr(0, dir.size()) == dir
&& path.size() >= dir.size() + 2
&& path[dir.size()] == '/';
}
bool isDirOrInDir(const Path & path, const Path & dir)
bool isDirOrInDir(std::string_view path, std::string_view dir)
{
return path == dir || isInDir(path, dir);
}

View file

@ -66,11 +66,13 @@ Path dirOf(const Path & path);
following the final `/' (trailing slashes are removed). */
std::string_view baseNameOf(std::string_view path);
/* Check whether 'path' is a descendant of 'dir'. */
bool isInDir(const Path & path, const Path & dir);
/* Check whether 'path' is a descendant of 'dir'. Both paths must be
canonicalized. */
bool isInDir(std::string_view path, std::string_view dir);
/* Check whether 'path' is equal to 'dir' or a descendant of 'dir'. */
bool isDirOrInDir(const Path & path, const Path & dir);
/* Check whether 'path' is equal to 'dir' or a descendant of
'dir'. Both paths must be canonicalized. */
bool isDirOrInDir(std::string_view path, std::string_view dir);
/* Get status of `path'. */
struct stat lstat(const Path & path);