input/curl: add method CurlInputStream::Open()

This commit is contained in:
Max Kellermann 2014-03-15 22:56:05 +01:00
parent 0dd5ebbdbe
commit 8f74bf314d
1 changed files with 18 additions and 13 deletions

View File

@ -178,6 +178,9 @@ struct CurlInputStream {
CurlInputStream(const CurlInputStream &) = delete; CurlInputStream(const CurlInputStream &) = delete;
CurlInputStream &operator=(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 Check(Error &error);
bool IsEOF() const { bool IsEOF() const {
@ -1174,6 +1177,20 @@ input_curl_seek(InputStream *is, InputPlugin::offset_type offset,
return c.Seek(offset, whence, error); return c.Seek(offset, whence, error);
} }
inline InputStream *
CurlInputStream::Open(const char *url, Mutex &mutex, Cond &cond,
Error &error)
{
CurlInputStream *c = new CurlInputStream(url, mutex, cond);
if (!c->InitEasy(error) || !input_curl_easy_add_indirect(c, error)) {
delete c;
return nullptr;
}
return &c->base;
}
static InputStream * static InputStream *
input_curl_open(const char *url, Mutex &mutex, Cond &cond, input_curl_open(const char *url, Mutex &mutex, Cond &cond,
Error &error) Error &error)
@ -1182,19 +1199,7 @@ input_curl_open(const char *url, Mutex &mutex, Cond &cond,
memcmp(url, "https://", 8) != 0) memcmp(url, "https://", 8) != 0)
return nullptr; return nullptr;
CurlInputStream *c = new CurlInputStream(url, mutex, cond); return CurlInputStream::Open(url, mutex, cond, error);
if (!c->InitEasy(error)) {
delete c;
return nullptr;
}
if (!input_curl_easy_add_indirect(c, error)) {
delete c;
return nullptr;
}
return &c->base;
} }
const struct InputPlugin input_plugin_curl = { const struct InputPlugin input_plugin_curl = {