diff options
author | Max Kellermann <max@duempel.org> | 2014-02-26 20:10:31 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-02-26 20:10:31 +0100 |
commit | 21e19ef69f1ab6efb5d6647b4428c31cef5cde69 (patch) | |
tree | 5f459e05d03104168c9c62afc84c4a0293648e6f /src/db/plugins/simple/SimpleDatabasePlugin.cxx | |
parent | 69a42fc901d06af2f90d7046e153dc1273f19beb (diff) | |
download | mpd-21e19ef69f1ab6efb5d6647b4428c31cef5cde69.tar.gz mpd-21e19ef69f1ab6efb5d6647b4428c31cef5cde69.tar.xz mpd-21e19ef69f1ab6efb5d6647b4428c31cef5cde69.zip |
db/simple/Directory: eliminate method LookupSong()
Move to SimpleDatabase::GetSong() to give that method more control.
Diffstat (limited to 'src/db/plugins/simple/SimpleDatabasePlugin.cxx')
-rw-r--r-- | src/db/plugins/simple/SimpleDatabasePlugin.cxx | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.cxx b/src/db/plugins/simple/SimpleDatabasePlugin.cxx index 8ba6eef92..e83ef575b 100644 --- a/src/db/plugins/simple/SimpleDatabasePlugin.cxx +++ b/src/db/plugins/simple/SimpleDatabasePlugin.cxx @@ -207,7 +207,25 @@ SimpleDatabase::GetSong(const char *uri, Error &error) const assert(borrowed_song_count == 0); db_lock(); - const Song *song = root->LookupSong(uri); + + auto r = root->LookupDirectory(uri); + if (r.uri == nullptr) { + /* it's a directory */ + db_unlock(); + error.Format(db_domain, DB_NOT_FOUND, + "No such song: %s", uri); + return nullptr; + } + + if (strchr(r.uri, '/') != nullptr) { + /* refers to a URI "below" the actual song */ + db_unlock(); + error.Format(db_domain, DB_NOT_FOUND, + "No such song: %s", uri); + return nullptr; + } + + const Song *song = r.directory->FindSong(r.uri); db_unlock(); if (song == nullptr) { error.Format(db_domain, DB_NOT_FOUND, |