mirror of
https://github.com/NixOS/nix
synced 2025-07-05 12:21:48 +02:00
Merge pull request #12667 from NixOS/in-dir-cleanup
Cleanup `isInDir` and `isDirOrInDir`
This commit is contained in:
commit
3d333e0aff
5 changed files with 16 additions and 18 deletions
|
@ -149,16 +149,18 @@ std::string_view baseNameOf(std::string_view path)
|
|||
}
|
||||
|
||||
|
||||
bool isInDir(std::string_view path, std::string_view dir)
|
||||
bool isInDir(const fs::path & path, const fs::path & dir)
|
||||
{
|
||||
return path.substr(0, 1) == "/"
|
||||
&& path.substr(0, dir.size()) == dir
|
||||
&& path.size() >= dir.size() + 2
|
||||
&& path[dir.size()] == '/';
|
||||
/* Note that while the standard doesn't guarantee this, the
|
||||
`lexically_*` functions should do no IO and not throw. */
|
||||
auto rel = path.lexically_relative(dir);
|
||||
/* Method from
|
||||
https://stackoverflow.com/questions/62503197/check-if-path-contains-another-in-c++ */
|
||||
return !rel.empty() && rel.native()[0] != OS_STR('.');
|
||||
}
|
||||
|
||||
|
||||
bool isDirOrInDir(std::string_view path, std::string_view dir)
|
||||
bool isDirOrInDir(const fs::path & path, const fs::path & dir)
|
||||
{
|
||||
return path == dir || isInDir(path, dir);
|
||||
}
|
||||
|
|
|
@ -105,13 +105,13 @@ std::string_view baseNameOf(std::string_view path);
|
|||
* Check whether 'path' is a descendant of 'dir'. Both paths must be
|
||||
* canonicalized.
|
||||
*/
|
||||
bool isInDir(std::string_view path, std::string_view dir);
|
||||
bool isInDir(const std::filesystem::path & path, const std::filesystem::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);
|
||||
bool isDirOrInDir(const std::filesystem::path & path, const std::filesystem::path & dir);
|
||||
|
||||
/**
|
||||
* Get status of `path`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue