InputPlugin: allow init() to soft-fail
Add enum InputResult which is a tri-state. Input plugins may now fail and just become unavailable.
This commit is contained in:
@@ -87,7 +87,7 @@ static constexpr Domain cdio_domain("cdio");
|
||||
|
||||
static bool default_reverse_endian;
|
||||
|
||||
static bool
|
||||
static InputPlugin::InitResult
|
||||
input_cdio_init(const config_param ¶m, Error &error)
|
||||
{
|
||||
const char *value = param.GetBlockValue("default_byte_order");
|
||||
@@ -100,11 +100,11 @@ input_cdio_init(const config_param ¶m, Error &error)
|
||||
error.Format(config_domain, 0,
|
||||
"Unrecognized 'default_byte_order' setting: %s",
|
||||
value);
|
||||
return false;
|
||||
return InputPlugin::InitResult::ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return InputPlugin::InitResult::SUCCESS;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -595,7 +595,7 @@ CurlMulti::OnTimeout()
|
||||
*
|
||||
*/
|
||||
|
||||
static bool
|
||||
static InputPlugin::InitResult
|
||||
input_curl_init(const config_param ¶m, Error &error)
|
||||
{
|
||||
CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
|
||||
@@ -603,7 +603,7 @@ input_curl_init(const config_param ¶m, Error &error)
|
||||
error.Format(curl_domain, code,
|
||||
"curl_global_init() failed: %s",
|
||||
curl_easy_strerror(code));
|
||||
return false;
|
||||
return InputPlugin::InitResult::UNAVAILABLE;
|
||||
}
|
||||
|
||||
const auto version_info = curl_version_info(CURLVERSION_FIRST);
|
||||
@@ -634,12 +634,14 @@ input_curl_init(const config_param ¶m, Error &error)
|
||||
|
||||
CURLM *multi = curl_multi_init();
|
||||
if (multi == nullptr) {
|
||||
curl_slist_free_all(http_200_aliases);
|
||||
curl_global_cleanup();
|
||||
error.Set(curl_domain, 0, "curl_multi_init() failed");
|
||||
return false;
|
||||
return InputPlugin::InitResult::UNAVAILABLE;
|
||||
}
|
||||
|
||||
curl_multi = new CurlMulti(io_thread_get(), multi);
|
||||
return true;
|
||||
return InputPlugin::InitResult::SUCCESS;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -69,7 +69,7 @@ input_ffmpeg_supported(void)
|
||||
return avio_enum_protocols(&opaque, 0) != nullptr;
|
||||
}
|
||||
|
||||
static bool
|
||||
static InputPlugin::InitResult
|
||||
input_ffmpeg_init(gcc_unused const config_param ¶m,
|
||||
Error &error)
|
||||
{
|
||||
@@ -78,10 +78,10 @@ input_ffmpeg_init(gcc_unused const config_param ¶m,
|
||||
/* disable this plugin if there's no registered protocol */
|
||||
if (!input_ffmpeg_supported()) {
|
||||
error.Set(ffmpeg_domain, "No protocol");
|
||||
return false;
|
||||
return InputPlugin::InitResult::UNAVAILABLE;
|
||||
}
|
||||
|
||||
return true;
|
||||
return InputPlugin::InitResult::SUCCESS;
|
||||
}
|
||||
|
||||
static InputStream *
|
||||
|
||||
@@ -91,17 +91,17 @@ public:
|
||||
*
|
||||
*/
|
||||
|
||||
static bool
|
||||
static InputPlugin::InitResult
|
||||
input_smbclient_init(gcc_unused const config_param ¶m, Error &error)
|
||||
{
|
||||
if (!SmbclientInit(error))
|
||||
return false;
|
||||
return InputPlugin::InitResult::UNAVAILABLE;
|
||||
|
||||
// TODO: create one global SMBCCTX here?
|
||||
|
||||
// TODO: evaluate config_param, call smbc_setOption*()
|
||||
|
||||
return true;
|
||||
return InputPlugin::InitResult::SUCCESS;
|
||||
}
|
||||
|
||||
static InputStream *
|
||||
|
||||
Reference in New Issue
Block a user