Skip to content

Commit

Permalink
raw-win32: Use bdrv_open options instead of filename
Browse files Browse the repository at this point in the history
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
  • Loading branch information
kevmw committed Apr 22, 2013
1 parent c66a615 commit 8a79380
Showing 1 changed file with 47 additions and 10 deletions.
57 changes: 47 additions & 10 deletions block/raw-win32.c
Expand Up @@ -221,21 +221,50 @@ static void raw_parse_flags(int flags, int *access_flags, DWORD *overlapped)
}
}

static int raw_open(BlockDriverState *bs, const char *filename,
static QemuOptsList raw_runtime_opts = {
.name = "raw",
.head = QTAILQ_HEAD_INITIALIZER(raw_runtime_opts.head),
.desc = {
{
.name = "filename",
.type = QEMU_OPT_STRING,
.help = "File name of the image",
},
{ /* end of list */ }
},
};

static int raw_open(BlockDriverState *bs, const char *unused,
QDict *options, int flags)
{
BDRVRawState *s = bs->opaque;
int access_flags;
DWORD overlapped;
QemuOpts *opts;
Error *local_err = NULL;
const char *filename;
int ret;

s->type = FTYPE_FILE;

opts = qemu_opts_create_nofail(&raw_runtime_opts);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
qerror_report_err(local_err);
error_free(local_err);
ret = -EINVAL;
goto fail;
}

filename = qemu_opt_get(opts, "filename");

raw_parse_flags(flags, &access_flags, &overlapped);

if ((flags & BDRV_O_NATIVE_AIO) && aio == NULL) {
aio = win32_aio_init();
if (aio == NULL) {
return -EINVAL;
ret = -EINVAL;
goto fail;
}
}

Expand All @@ -245,20 +274,27 @@ static int raw_open(BlockDriverState *bs, const char *filename,
if (s->hfile == INVALID_HANDLE_VALUE) {
int err = GetLastError();

if (err == ERROR_ACCESS_DENIED)
return -EACCES;
return -EINVAL;
if (err == ERROR_ACCESS_DENIED) {
ret = -EACCES;
} else {
ret = -EINVAL;
}
goto fail;
}

if (flags & BDRV_O_NATIVE_AIO) {
int ret = win32_aio_attach(aio, s->hfile);
ret = win32_aio_attach(aio, s->hfile);
if (ret < 0) {
CloseHandle(s->hfile);
return ret;
goto fail;
}
s->aio = aio;
}
return 0;

ret = 0;
fail:
qemu_opts_del(opts);
return ret;
}

static BlockDriverAIOCB *raw_aio_readv(BlockDriverState *bs,
Expand Down Expand Up @@ -495,13 +531,14 @@ static int hdev_probe_device(const char *filename)
return 0;
}

static int hdev_open(BlockDriverState *bs, const char *filename,
static int hdev_open(BlockDriverState *bs, const char *dummy,
QDict *options, int flags)
{
BDRVRawState *s = bs->opaque;
int access_flags, create_flags;
DWORD overlapped;
char device_name[64];
const char *filename = qdict_get_str(options, "filename");

if (strstart(filename, "/dev/cdrom", NULL)) {
if (find_cdrom(device_name, sizeof(device_name)) < 0)
Expand Down

0 comments on commit 8a79380

Please sign in to comment.