mirror of https://github.com/xqemu/xqemu.git
block/curl: check error return of curl_global_init()
If curl_global_init() fails, per the documentation no other curl functions may be called, so make sure to check the return value. Also, some minor changes to the initialization latch variable 'inited': - Make it static in the file, for clarity - Change the name for clarity - Make it a bool Signed-off-by: Jeff Cody <jcody@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Richard W.M. Jones <rjones@redhat.com> Reviewed-by: Darren Kenny <darren.kenny@oracle.com> Signed-off-by: Jeff Cody <jcody@redhat.com>
This commit is contained in:
parent
d507c5f682
commit
2d25964d18
18
block/curl.c
18
block/curl.c
|
@ -89,6 +89,8 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle,
|
||||||
|
|
||||||
struct BDRVCURLState;
|
struct BDRVCURLState;
|
||||||
|
|
||||||
|
static bool libcurl_initialized;
|
||||||
|
|
||||||
typedef struct CURLAIOCB {
|
typedef struct CURLAIOCB {
|
||||||
Coroutine *co;
|
Coroutine *co;
|
||||||
QEMUIOVector *qiov;
|
QEMUIOVector *qiov;
|
||||||
|
@ -686,14 +688,23 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
double d;
|
double d;
|
||||||
const char *secretid;
|
const char *secretid;
|
||||||
const char *protocol_delimiter;
|
const char *protocol_delimiter;
|
||||||
|
int ret;
|
||||||
|
|
||||||
static int inited = 0;
|
|
||||||
|
|
||||||
if (flags & BDRV_O_RDWR) {
|
if (flags & BDRV_O_RDWR) {
|
||||||
error_setg(errp, "curl block device does not support writes");
|
error_setg(errp, "curl block device does not support writes");
|
||||||
return -EROFS;
|
return -EROFS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!libcurl_initialized) {
|
||||||
|
ret = curl_global_init(CURL_GLOBAL_ALL);
|
||||||
|
if (ret) {
|
||||||
|
error_setg(errp, "libcurl initialization failed with %d", ret);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
libcurl_initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
qemu_mutex_init(&s->mutex);
|
qemu_mutex_init(&s->mutex);
|
||||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
|
@ -772,11 +783,6 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!inited) {
|
|
||||||
curl_global_init(CURL_GLOBAL_ALL);
|
|
||||||
inited = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
DPRINTF("CURL: Opening %s\n", file);
|
DPRINTF("CURL: Opening %s\n", file);
|
||||||
QSIMPLEQ_INIT(&s->free_state_waitq);
|
QSIMPLEQ_INIT(&s->free_state_waitq);
|
||||||
s->aio_context = bdrv_get_aio_context(bs);
|
s->aio_context = bdrv_get_aio_context(bs);
|
||||||
|
|
Loading…
Reference in New Issue