|
|
|
@ -70,7 +70,7 @@ static void vitastor_co_generic_bh_cb(void *opaque, long retval);
|
|
|
|
|
static void vitastor_co_read_cb(void *opaque, long retval, uint64_t version);
|
|
|
|
|
static void vitastor_close(BlockDriverState *bs);
|
|
|
|
|
|
|
|
|
|
static char *qemu_rbd_next_tok(char *src, char delim, char **p)
|
|
|
|
|
static char *qemu_vitastor_next_tok(char *src, char delim, char **p)
|
|
|
|
|
{
|
|
|
|
|
char *end;
|
|
|
|
|
*p = NULL;
|
|
|
|
@ -89,7 +89,7 @@ static char *qemu_rbd_next_tok(char *src, char delim, char **p)
|
|
|
|
|
return src;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void qemu_rbd_unescape(char *src)
|
|
|
|
|
static void qemu_vitastor_unescape(char *src)
|
|
|
|
|
{
|
|
|
|
|
char *p;
|
|
|
|
|
for (p = src; *src; ++src, ++p)
|
|
|
|
@ -122,15 +122,15 @@ static void vitastor_parse_filename(const char *filename, QDict *options, Error
|
|
|
|
|
while (p)
|
|
|
|
|
{
|
|
|
|
|
char *name, *value;
|
|
|
|
|
name = qemu_rbd_next_tok(p, '=', &p);
|
|
|
|
|
name = qemu_vitastor_next_tok(p, '=', &p);
|
|
|
|
|
if (!p)
|
|
|
|
|
{
|
|
|
|
|
error_setg(errp, "conf option %s has no value", name);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
qemu_rbd_unescape(name);
|
|
|
|
|
value = qemu_rbd_next_tok(p, ':', &p);
|
|
|
|
|
qemu_rbd_unescape(value);
|
|
|
|
|
qemu_vitastor_unescape(name);
|
|
|
|
|
value = qemu_vitastor_next_tok(p, ':', &p);
|
|
|
|
|
qemu_vitastor_unescape(value);
|
|
|
|
|
if (!strcmp(name, "inode") ||
|
|
|
|
|
!strcmp(name, "pool") ||
|
|
|
|
|
!strcmp(name, "size") ||
|
|
|
|
|