diff options
Diffstat (limited to '')
-rw-r--r-- | src/db/UpnpDatabasePlugin.cxx | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/src/db/UpnpDatabasePlugin.cxx b/src/db/UpnpDatabasePlugin.cxx index c778ca34e..5ce09e31e 100644 --- a/src/db/UpnpDatabasePlugin.cxx +++ b/src/db/UpnpDatabasePlugin.cxx @@ -219,31 +219,29 @@ UpnpDatabase::ReturnSong(const LightSong *_song) const const LightSong * UpnpDatabase::GetSong(const char *uri, Error &error) const { - UpnpSong *song = nullptr; auto vpath = stringToTokens(uri, "/", true); - if (vpath.size() >= 2) { - ContentDirectoryService server; - if (!m_superdir->getServer(vpath[0].c_str(), server, error)) - return nullptr; + if (vpath.size() < 2) { + error.Format(db_domain, DB_NOT_FOUND, "No such song: %s", uri); + return nullptr; + } - vpath.erase(vpath.begin()); - UPnPDirObject dirent; - if (vpath[0].compare(rootid)) { - std::string objid; - if (!Namei(server, vpath, objid, dirent, error)) - return nullptr; - } else { - if (!ReadNode(server, vpath.back().c_str(), dirent, - error)) - return nullptr; - } + ContentDirectoryService server; + if (!m_superdir->getServer(vpath[0].c_str(), server, error)) + return nullptr; - song = new UpnpSong(std::move(dirent), uri); + vpath.erase(vpath.begin()); + UPnPDirObject dirent; + if (vpath[0].compare(rootid)) { + std::string objid; + if (!Namei(server, vpath, objid, dirent, error)) + return nullptr; + } else { + if (!ReadNode(server, vpath.back().c_str(), dirent, + error)) + return nullptr; } - if (song == nullptr) - error.Format(db_domain, DB_NOT_FOUND, "No such song: %s", uri); - return song; + return new UpnpSong(std::move(dirent), uri); } /** |