diff options
author | Max Kellermann <max@duempel.org> | 2013-10-14 22:09:02 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-10-14 22:09:02 +0200 |
commit | 0b27ac2f5c6a352be733f00e873ceb9d0904e92a (patch) | |
tree | d0b5775b1e0afe08b4c4873ec8887f548d3e8fe0 /src/fs/Path.cxx | |
parent | 6fd481df978ad4666780ef838e6c8540f6ea190f (diff) | |
download | mpd-0b27ac2f5c6a352be733f00e873ceb9d0904e92a.tar.gz mpd-0b27ac2f5c6a352be733f00e873ceb9d0904e92a.tar.xz mpd-0b27ac2f5c6a352be733f00e873ceb9d0904e92a.zip |
fs/Path: add method RelativeFS()
Move code from map_fs_to_utf8().
Diffstat (limited to 'src/fs/Path.cxx')
-rw-r--r-- | src/fs/Path.cxx | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/fs/Path.cxx b/src/fs/Path.cxx index 09616c9f4..1a1f133d0 100644 --- a/src/fs/Path.cxx +++ b/src/fs/Path.cxx @@ -184,3 +184,25 @@ void Path::GlobalInit() SetFSCharset("ISO-8859-1"); } } + +const char * +Path::RelativeFS(const char *other_fs) const +{ + const size_t l = length(); + if (memcmp(data(), other_fs, l) != 0) + return nullptr; + + other_fs += l; + if (*other_fs != 0) { + if (!G_IS_DIR_SEPARATOR(*other_fs)) + /* mismatch */ + return nullptr; + + /* skip remaining path separators */ + do { + ++other_fs; + } while (G_IS_DIR_SEPARATOR(*other_fs)); + } + + return other_fs; +} |