diff options
author | Max Kellermann <max@musicpd.org> | 2016-10-27 21:01:27 +0200 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2016-10-27 21:01:27 +0200 |
commit | debc8558069448edb77c2879c15ff393a75649b9 (patch) | |
tree | 5598bcc4d887dcf14028e4f8dbe8250b49fbabd0 /src/storage | |
parent | 10e32454ef161563a1bde2a8b35306bcce419a0c (diff) | |
parent | 49c04ccfc7fc326c3128d116a43bcad5fff6077d (diff) |
Merge branch 'v0.19.x'
Diffstat (limited to 'src/storage')
-rw-r--r-- | src/storage/CompositeStorage.cxx | 18 | ||||
-rw-r--r-- | src/storage/CompositeStorage.hxx | 11 |
2 files changed, 15 insertions, 14 deletions
diff --git a/src/storage/CompositeStorage.cxx b/src/storage/CompositeStorage.cxx index b1655d0bf..e28cb487a 100644 --- a/src/storage/CompositeStorage.cxx +++ b/src/storage/CompositeStorage.cxx @@ -266,22 +266,13 @@ CompositeStorage::FindStorage(const char *uri) const return result; } -CompositeStorage::FindResult -CompositeStorage::FindStorage(const char *uri, Error &error) const -{ - auto result = FindStorage(uri); - if (result.directory == nullptr) - error.Set(composite_domain, "No such directory"); - return result; -} - bool CompositeStorage::GetInfo(const char *uri, bool follow, StorageFileInfo &info, Error &error) { const ScopeLock protect(mutex); - auto f = FindStorage(uri, error); + auto f = FindStorage(uri); if (f.directory->storage != nullptr && f.directory->storage->GetInfo(f.uri, follow, info, error)) return true; @@ -296,6 +287,7 @@ CompositeStorage::GetInfo(const char *uri, bool follow, StorageFileInfo &info, return true; } + error.Set(composite_domain, "No such directory"); return false; } @@ -305,13 +297,15 @@ CompositeStorage::OpenDirectory(const char *uri, { const ScopeLock protect(mutex); - auto f = FindStorage(uri, error); + auto f = FindStorage(uri); const Directory *directory = f.directory->Find(f.uri); if (directory == nullptr || directory->children.empty()) { /* no virtual directories here */ - if (f.directory->storage == nullptr) + if (f.directory->storage == nullptr) { + error.Set(composite_domain, "No such directory"); return nullptr; + } return f.directory->storage->OpenDirectory(f.uri, error); } diff --git a/src/storage/CompositeStorage.hxx b/src/storage/CompositeStorage.hxx index 89d2f90d3..05d6b3130 100644 --- a/src/storage/CompositeStorage.hxx +++ b/src/storage/CompositeStorage.hxx @@ -44,7 +44,7 @@ class CompositeStorage final : public Storage { */ struct Directory { /** - * The #Storage mounted n this virtual directory. All + * The #Storage mounted in this virtual directory. All * "leaf" Directory instances must have a #Storage. * Other Directory instances may have one, and child * mounts will be "mixed" in. @@ -154,9 +154,16 @@ private: } } + /** + * Follow the given URI path, and find the outermost directory + * which is a #Storage mount point. If there are no mounts, + * it returns the root directory (with a nullptr "storage" + * attribute, of course). FindResult::uri contains the + * remaining unused part of the URI (may be empty if all of + * the URI was used). + */ gcc_pure FindResult FindStorage(const char *uri) const; - FindResult FindStorage(const char *uri, Error &error) const; const char *MapToRelativeUTF8(const Directory &directory, const char *uri) const; |