diff options
-rw-r--r-- | block.c | 55 | ||||
-rw-r--r-- | block/vvfat.c | 11 |
2 files changed, 24 insertions, 42 deletions
@@ -184,42 +184,6 @@ BlockDriver *bdrv_find_format(const char *format_name) return NULL; } -int bdrv_create2(BlockDriver *drv, - const char *filename, int64_t size_in_sectors, - const char *backing_file, const char *backing_format, - int flags) -{ - QEMUOptionParameter *options; - - options = parse_option_parameters("", drv->create_options, NULL); - - // Process flags - if (flags & ~(BLOCK_FLAG_ENCRYPT | BLOCK_FLAG_COMPAT6 | BLOCK_FLAG_COMPRESS)) { - return -ENOTSUP; - } - - if (flags & BLOCK_FLAG_ENCRYPT) { - set_option_parameter_int(options, BLOCK_OPT_ENCRYPT, 1); - } - if (flags & BLOCK_FLAG_COMPAT6) { - set_option_parameter_int(options, BLOCK_OPT_COMPAT6, 1); - } - - // Add size to options - set_option_parameter_int(options, BLOCK_OPT_SIZE, size_in_sectors * 512); - - // Backing files - if ((backing_file != NULL && set_option_parameter(options, - BLOCK_OPT_BACKING_FILE, backing_file)) - || (backing_format != NULL && set_option_parameter(options, - BLOCK_OPT_BACKING_FMT, backing_format))) - { - return -ENOTSUP; - } - - return bdrv_create(drv, filename, options); -} - int bdrv_create(BlockDriver *drv, const char* filename, QEMUOptionParameter *options) { @@ -392,6 +356,8 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, BlockDriverState *bs1; int64_t total_size; int is_protocol = 0; + BlockDriver *bdrv_qcow2; + QEMUOptionParameter *options; /* if snapshot, we create a temporary backing file and open it instead of opening 'filename' directly */ @@ -419,14 +385,23 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, else realpath(filename, backing_filename); - ret = bdrv_create2(bdrv_find_format("qcow2"), tmp_filename, - total_size, backing_filename, - (drv ? drv->format_name : NULL), 0); + bdrv_qcow2 = bdrv_find_format("qcow2"); + options = parse_option_parameters("", bdrv_qcow2->create_options, NULL); + + set_option_parameter_int(options, BLOCK_OPT_SIZE, total_size * 512); + set_option_parameter(options, BLOCK_OPT_BACKING_FILE, backing_filename); + if (drv) { + set_option_parameter(options, BLOCK_OPT_BACKING_FMT, + drv->format_name); + } + + ret = bdrv_create(bdrv_qcow2, tmp_filename, options); if (ret < 0) { return ret; } + filename = tmp_filename; - drv = bdrv_find_format("qcow2"); + drv = bdrv_qcow2; bs->is_temporary = 1; } diff --git a/block/vvfat.c b/block/vvfat.c index 13960e95a6..6c29f489aa 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -2770,6 +2770,8 @@ static BlockDriver vvfat_write_target = { static int enable_write_target(BDRVVVFATState *s) { + BlockDriver *bdrv_qcow; + QEMUOptionParameter *options; int size = sector2cluster(s, s->sector_count); s->used_clusters = calloc(size, 1); @@ -2777,8 +2779,13 @@ static int enable_write_target(BDRVVVFATState *s) s->qcow_filename = qemu_malloc(1024); get_tmp_filename(s->qcow_filename, 1024); - if (bdrv_create2(bdrv_find_format("qcow"), - s->qcow_filename, s->sector_count, "fat:", NULL, 0) < 0) + + bdrv_qcow = bdrv_find_format("qcow"); + options = parse_option_parameters("", bdrv_qcow->create_options, NULL); + set_option_parameter_int(options, BLOCK_OPT_SIZE, s->sector_count * 512); + set_option_parameter(options, BLOCK_OPT_BACKING_FILE, "fat:"); + + if (bdrv_create(bdrv_qcow, s->qcow_filename, options) < 0) return -1; s->qcow = bdrv_new(""); if (s->qcow == NULL || bdrv_open(s->qcow, s->qcow_filename, 0) < 0) |