diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.cxx b/src/db/plugins/simple/SimpleDatabasePlugin.cxx index df2aa2b1f..f7bae65d8 100644 --- a/src/db/plugins/simple/SimpleDatabasePlugin.cxx +++ b/src/db/plugins/simple/SimpleDatabasePlugin.cxx @@ -113,8 +113,8 @@ SimpleDatabase::Configure(const ConfigBlock &block, Error &error) return true; } -bool -SimpleDatabase::Check(Error &error) const +void +SimpleDatabase::Check() const { assert(!path.IsNull()); @@ -127,54 +127,43 @@ SimpleDatabase::Check(Error &error) const /* Check that the parent part of the path is a directory */ FileInfo fi; - if (!GetFileInfo(dirPath, fi, error)) { - error.AddPrefix("On parent directory of db file: "); - return false; + + try { + fi = FileInfo(dirPath); + } catch (...) { + std::throw_with_nested(std::runtime_error("On parent directory of db file")); } - if (!fi.IsDirectory()) { - error.Format(simple_db_domain, - "Couldn't create db file \"%s\" because the " - "parent path is not a directory", - path_utf8.c_str()); - return false; - } + if (!fi.IsDirectory()) + throw std::runtime_error("Couldn't create db file \"" + + path_utf8 + "\" because the " + "parent path is not a directory"); #ifndef WIN32 /* Check if we can write to the directory */ if (!CheckAccess(dirPath, X_OK | W_OK)) { const int e = errno; const std::string dirPath_utf8 = dirPath.ToUTF8(); - error.FormatErrno(e, "Can't create db file in \"%s\"", + throw FormatErrno(e, "Can't create db file in \"%s\"", dirPath_utf8.c_str()); - return false; } #endif - return true; + + return; } /* Path exists, now check if it's a regular file */ - FileInfo fi; - if (!GetFileInfo(path, fi, error)) - return false; + const FileInfo fi(path); - if (!fi.IsRegular()) { - error.Format(simple_db_domain, - "db file \"%s\" is not a regular file", - path_utf8.c_str()); - return false; - } + if (!fi.IsRegular()) + throw std::runtime_error("db file \"" + path_utf8 + "\" is not a regular file"); #ifndef WIN32 /* And check that we can write to it */ - if (!CheckAccess(path, R_OK | W_OK)) { - error.FormatErrno("Can't open db file \"%s\" for reading/writing", + if (!CheckAccess(path, R_OK | W_OK)) + throw FormatErrno("Can't open db file \"%s\" for reading/writing", path_utf8.c_str()); - return false; - } #endif - - return true; } bool @@ -196,7 +185,7 @@ SimpleDatabase::Load(Error &error) } bool -SimpleDatabase::Open(Error &error) +SimpleDatabase::Open(gcc_unused Error &error) { assert(prefixed_light_song == nullptr); @@ -214,8 +203,7 @@ SimpleDatabase::Open(Error &error) delete root; - if (!Check(error)) - return false; + Check(); root = Directory::NewRoot(); } @@ -224,8 +212,7 @@ SimpleDatabase::Open(Error &error) delete root; - if (!Check(error)) - return false; + Check(); root = Directory::NewRoot(); } diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.hxx b/src/db/plugins/simple/SimpleDatabasePlugin.hxx index 0d31b3811..bdb71e420 100644 --- a/src/db/plugins/simple/SimpleDatabasePlugin.hxx +++ b/src/db/plugins/simple/SimpleDatabasePlugin.hxx @@ -136,7 +136,7 @@ public: private: bool Configure(const ConfigBlock &block, Error &error); - bool Check(Error &error) const; + void Check() const; bool Load(Error &error);