Loading block/raw-win32.c +47 −10 Original line number Diff line number Diff line Loading @@ -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; } } Loading @@ -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, Loading Loading @@ -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) Loading Loading
block/raw-win32.c +47 −10 Original line number Diff line number Diff line Loading @@ -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; } } Loading @@ -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, Loading Loading @@ -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) Loading