summaryrefslogtreecommitdiff
path: root/src/storage
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2016-10-27 21:01:27 +0200
committerMax Kellermann <max@musicpd.org>2016-10-27 21:01:27 +0200
commitdebc8558069448edb77c2879c15ff393a75649b9 (patch)
tree5598bcc4d887dcf14028e4f8dbe8250b49fbabd0 /src/storage
parent10e32454ef161563a1bde2a8b35306bcce419a0c (diff)
parent49c04ccfc7fc326c3128d116a43bcad5fff6077d (diff)
Merge branch 'v0.19.x'
Diffstat (limited to 'src/storage')
-rw-r--r--src/storage/CompositeStorage.cxx18
-rw-r--r--src/storage/CompositeStorage.hxx11
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;