From 135662d6b0714d123afa805a62462fff917943b5 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 5 Sep 2016 11:32:20 +0200 Subject: [PATCH] lib/smbclient/Init: throw std::runtime_error on error --- src/input/plugins/SmbclientInputPlugin.cxx | 9 +++++++-- src/lib/smbclient/Init.cxx | 14 +++++--------- src/lib/smbclient/Init.hxx | 10 ++++------ src/neighbor/plugins/SmbclientNeighborPlugin.cxx | 3 +-- src/storage/plugins/SmbclientStorage.cxx | 3 +-- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/input/plugins/SmbclientInputPlugin.cxx b/src/input/plugins/SmbclientInputPlugin.cxx index 66c40957e..97be5c47a 100644 --- a/src/input/plugins/SmbclientInputPlugin.cxx +++ b/src/input/plugins/SmbclientInputPlugin.cxx @@ -28,6 +28,8 @@ #include +#include + class SmbclientInputStream final : public InputStream { SMBCCTX *ctx; int fd; @@ -66,10 +68,13 @@ public: */ static InputPlugin::InitResult -input_smbclient_init(gcc_unused const ConfigBlock &block, Error &error) +input_smbclient_init(gcc_unused const ConfigBlock &block, gcc_unused Error &error) { - if (!SmbclientInit(error)) + try { + SmbclientInit(); + } catch (const std::runtime_error &e) { return InputPlugin::InitResult::UNAVAILABLE; + } // TODO: create one global SMBCCTX here? diff --git a/src/lib/smbclient/Init.cxx b/src/lib/smbclient/Init.cxx index 11f9174f1..b8b7d8391 100644 --- a/src/lib/smbclient/Init.cxx +++ b/src/lib/smbclient/Init.cxx @@ -21,7 +21,7 @@ #include "Init.hxx" #include "Mutex.hxx" #include "thread/Mutex.hxx" -#include "util/Error.hxx" +#include "system/Error.hxx" #include @@ -40,16 +40,12 @@ mpd_smbc_get_auth_data(gcc_unused const char *srv, strcpy(pw, ""); } -bool -SmbclientInit(Error &error) +void +SmbclientInit() { const ScopeLock protect(smbclient_mutex); constexpr int debug = 0; - if (smbc_init(mpd_smbc_get_auth_data, debug) < 0) { - error.SetErrno("smbc_init() failed"); - return false; - } - - return true; + if (smbc_init(mpd_smbc_get_auth_data, debug) < 0) + throw MakeErrno("smbc_init() failed"); } diff --git a/src/lib/smbclient/Init.hxx b/src/lib/smbclient/Init.hxx index 000e83365..ec3d9be4e 100644 --- a/src/lib/smbclient/Init.hxx +++ b/src/lib/smbclient/Init.hxx @@ -20,14 +20,12 @@ #ifndef MPD_SMBCLIENT_INIT_HXX #define MPD_SMBCLIENT_INIT_HXX -#include "check.h" - -class Error; - /** * Initialize libsmbclient. + * + * Throws std::runtime_error on error. */ -bool -SmbclientInit(Error &error); +void +SmbclientInit(); #endif diff --git a/src/neighbor/plugins/SmbclientNeighborPlugin.cxx b/src/neighbor/plugins/SmbclientNeighborPlugin.cxx index ea0528d35..32125896a 100644 --- a/src/neighbor/plugins/SmbclientNeighborPlugin.cxx +++ b/src/neighbor/plugins/SmbclientNeighborPlugin.cxx @@ -273,8 +273,7 @@ smbclient_neighbor_create(gcc_unused EventLoop &loop, gcc_unused const ConfigBlock &block, gcc_unused Error &error) { - if (!SmbclientInit(error)) - return nullptr; + SmbclientInit(); return new SmbclientNeighborExplorer(listener); } diff --git a/src/storage/plugins/SmbclientStorage.cxx b/src/storage/plugins/SmbclientStorage.cxx index a7d00e8cf..86b727315 100644 --- a/src/storage/plugins/SmbclientStorage.cxx +++ b/src/storage/plugins/SmbclientStorage.cxx @@ -189,8 +189,7 @@ CreateSmbclientStorageURI(gcc_unused EventLoop &event_loop, const char *base, if (memcmp(base, "smb://", 6) != 0) return nullptr; - if (!SmbclientInit(error)) - return nullptr; + SmbclientInit(); const ScopeLock protect(smbclient_mutex); SMBCCTX *ctx = smbc_new_context();