input/Plugin: migrate init() from class Error to C++ exceptions
This commit is contained in:
@@ -21,7 +21,6 @@
|
||||
#include "Init.hxx"
|
||||
#include "Registry.hxx"
|
||||
#include "InputPlugin.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "config/ConfigGlobal.hxx"
|
||||
#include "config/ConfigOption.hxx"
|
||||
#include "config/Block.hxx"
|
||||
@@ -33,8 +32,8 @@
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
bool
|
||||
input_stream_global_init(Error &error)
|
||||
void
|
||||
input_stream_global_init()
|
||||
{
|
||||
const ConfigBlock empty;
|
||||
|
||||
@@ -54,12 +53,9 @@ input_stream_global_init(Error &error)
|
||||
/* the plugin is disabled in mpd.conf */
|
||||
continue;
|
||||
|
||||
InputPlugin::InitResult result;
|
||||
|
||||
try {
|
||||
result = plugin->init != nullptr
|
||||
? plugin->init(*block, error)
|
||||
: InputPlugin::InitResult::SUCCESS;
|
||||
if (plugin->init != nullptr)
|
||||
plugin->init(*block);
|
||||
} catch (const PluginUnavailable &e) {
|
||||
FormatError(e,
|
||||
"Input plugin '%s' is unavailable",
|
||||
@@ -69,20 +65,7 @@ input_stream_global_init(Error &error)
|
||||
std::throw_with_nested(FormatRuntimeError("Failed to initialize input plugin '%s'",
|
||||
plugin->name));
|
||||
}
|
||||
|
||||
switch (result) {
|
||||
case InputPlugin::InitResult::SUCCESS:
|
||||
input_plugins_enabled[i] = true;
|
||||
break;
|
||||
|
||||
case InputPlugin::InitResult::ERROR:
|
||||
error.FormatPrefix("Failed to initialize input plugin '%s': ",
|
||||
plugin->name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void input_stream_global_finish(void)
|
||||
|
@@ -25,8 +25,8 @@ class Error;
|
||||
/**
|
||||
* Initializes this library and all #InputStream implementations.
|
||||
*/
|
||||
bool
|
||||
input_stream_global_init(Error &error);
|
||||
void
|
||||
input_stream_global_init();
|
||||
|
||||
/**
|
||||
* Deinitializes this library and all #InputStream implementations.
|
||||
|
@@ -40,20 +40,6 @@ class Error;
|
||||
struct Tag;
|
||||
|
||||
struct InputPlugin {
|
||||
enum class InitResult {
|
||||
/**
|
||||
* A fatal error has occurred (e.g. misconfiguration).
|
||||
* The #Error has been set.
|
||||
*/
|
||||
ERROR,
|
||||
|
||||
/**
|
||||
* The plugin was initialized successfully and is
|
||||
* ready to be used.
|
||||
*/
|
||||
SUCCESS,
|
||||
};
|
||||
|
||||
const char *name;
|
||||
|
||||
/**
|
||||
@@ -61,8 +47,10 @@ struct InputPlugin {
|
||||
*
|
||||
* Throws #PluginUnavailable if the plugin is not available
|
||||
* and shall be disabled.
|
||||
*
|
||||
* Throws std::runtime_error on (fatal) error.
|
||||
*/
|
||||
InitResult (*init)(const ConfigBlock &block, Error &error);
|
||||
void (*init)(const ConfigBlock &block);
|
||||
|
||||
/**
|
||||
* Global deinitialization. Called once before MPD shuts
|
||||
|
@@ -27,6 +27,7 @@
|
||||
#include "../InputPlugin.hxx"
|
||||
#include "util/StringUtil.hxx"
|
||||
#include "util/StringCompare.hxx"
|
||||
#include "util/RuntimeError.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "util/Domain.hxx"
|
||||
#include "system/ByteOrder.hxx"
|
||||
@@ -105,8 +106,8 @@ static constexpr Domain cdio_domain("cdio");
|
||||
|
||||
static bool default_reverse_endian;
|
||||
|
||||
static InputPlugin::InitResult
|
||||
input_cdio_init(const ConfigBlock &block, Error &error)
|
||||
static void
|
||||
input_cdio_init(const ConfigBlock &block)
|
||||
{
|
||||
const char *value = block.GetBlockValue("default_byte_order");
|
||||
if (value != nullptr) {
|
||||
@@ -114,15 +115,10 @@ input_cdio_init(const ConfigBlock &block, Error &error)
|
||||
default_reverse_endian = IsBigEndian();
|
||||
else if (strcmp(value, "big_endian") == 0)
|
||||
default_reverse_endian = IsLittleEndian();
|
||||
else {
|
||||
error.Format(config_domain, 0,
|
||||
"Unrecognized 'default_byte_order' setting: %s",
|
||||
value);
|
||||
return InputPlugin::InitResult::ERROR;
|
||||
}
|
||||
else
|
||||
throw FormatRuntimeError("Unrecognized 'default_byte_order' setting: %s",
|
||||
value);
|
||||
}
|
||||
|
||||
return InputPlugin::InitResult::SUCCESS;
|
||||
}
|
||||
|
||||
struct cdio_uri {
|
||||
|
@@ -533,8 +533,8 @@ CurlMulti::OnTimeout()
|
||||
*
|
||||
*/
|
||||
|
||||
static InputPlugin::InitResult
|
||||
input_curl_init(const ConfigBlock &block, gcc_unused Error &error)
|
||||
static void
|
||||
input_curl_init(const ConfigBlock &block)
|
||||
{
|
||||
CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
|
||||
if (code != CURLE_OK)
|
||||
@@ -577,7 +577,6 @@ input_curl_init(const ConfigBlock &block, gcc_unused Error &error)
|
||||
}
|
||||
|
||||
curl_multi = new CurlMulti(io_thread_get(), multi);
|
||||
return InputPlugin::InitResult::SUCCESS;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -72,17 +72,14 @@ input_ffmpeg_supported(void)
|
||||
return avio_enum_protocols(&opaque, 0) != nullptr;
|
||||
}
|
||||
|
||||
static InputPlugin::InitResult
|
||||
input_ffmpeg_init(gcc_unused const ConfigBlock &block,
|
||||
gcc_unused Error &error)
|
||||
static void
|
||||
input_ffmpeg_init(gcc_unused const ConfigBlock &block)
|
||||
{
|
||||
FfmpegInit();
|
||||
|
||||
/* disable this plugin if there's no registered protocol */
|
||||
if (!input_ffmpeg_supported())
|
||||
throw PluginUnavailable("No protocol");
|
||||
|
||||
return InputPlugin::InitResult::SUCCESS;
|
||||
}
|
||||
|
||||
static InputStream *
|
||||
|
@@ -215,11 +215,10 @@ NfsInputStream::OnNfsFileError(Error &&error)
|
||||
*
|
||||
*/
|
||||
|
||||
static InputPlugin::InitResult
|
||||
input_nfs_init(const ConfigBlock &, Error &)
|
||||
static void
|
||||
input_nfs_init(const ConfigBlock &)
|
||||
{
|
||||
nfs_init();
|
||||
return InputPlugin::InitResult::SUCCESS;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -68,8 +68,8 @@ public:
|
||||
*
|
||||
*/
|
||||
|
||||
static InputPlugin::InitResult
|
||||
input_smbclient_init(gcc_unused const ConfigBlock &block, gcc_unused Error &error)
|
||||
static void
|
||||
input_smbclient_init(gcc_unused const ConfigBlock &block)
|
||||
{
|
||||
try {
|
||||
SmbclientInit();
|
||||
@@ -81,8 +81,6 @@ input_smbclient_init(gcc_unused const ConfigBlock &block, gcc_unused Error &erro
|
||||
// TODO: create one global SMBCCTX here?
|
||||
|
||||
// TODO: evaluate ConfigBlock, call smbc_setOption*()
|
||||
|
||||
return InputPlugin::InitResult::SUCCESS;
|
||||
}
|
||||
|
||||
static InputStream *
|
||||
|
Reference in New Issue
Block a user