diff options
-rw-r--r-- | src/input/plugins/CurlInputPlugin.cxx | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/input/plugins/CurlInputPlugin.cxx b/src/input/plugins/CurlInputPlugin.cxx index 9d9adcf07..60facb26b 100644 --- a/src/input/plugins/CurlInputPlugin.cxx +++ b/src/input/plugins/CurlInputPlugin.cxx @@ -178,6 +178,9 @@ struct CurlInputStream { CurlInputStream(const CurlInputStream &) = delete; CurlInputStream &operator=(const CurlInputStream &) = delete; + static InputStream *Open(const char *url, Mutex &mutex, Cond &cond, + Error &error); + bool Check(Error &error); bool IsEOF() const { @@ -1174,27 +1177,29 @@ input_curl_seek(InputStream *is, InputPlugin::offset_type offset, return c.Seek(offset, whence, error); } -static InputStream * -input_curl_open(const char *url, Mutex &mutex, Cond &cond, - Error &error) +inline InputStream * +CurlInputStream::Open(const char *url, Mutex &mutex, Cond &cond, + Error &error) { - if (memcmp(url, "http://", 7) != 0 && - memcmp(url, "https://", 8) != 0) - return nullptr; - CurlInputStream *c = new CurlInputStream(url, mutex, cond); - if (!c->InitEasy(error)) { + if (!c->InitEasy(error) || !input_curl_easy_add_indirect(c, error)) { delete c; return nullptr; } - if (!input_curl_easy_add_indirect(c, error)) { - delete c; + return &c->base; +} + +static InputStream * +input_curl_open(const char *url, Mutex &mutex, Cond &cond, + Error &error) +{ + if (memcmp(url, "http://", 7) != 0 && + memcmp(url, "https://", 8) != 0) return nullptr; - } - return &c->base; + return CurlInputStream::Open(url, mutex, cond, error); } const struct InputPlugin input_plugin_curl = { |