On Fri, Nov 23, 2012 at 8:47 AM, Dong Xu Wang <wdon...@linux.vnet.ibm.com> wrote: > This patch will use QemuOpts related functions in block layer, add > a member bdrv_create_options to BlockDriver struct, it will return > a QemuOptsList pointer, which includes the image format's create > options. > > And create options's primary consumer is block creating related functions, > so modify them together. > > This patch also define a macro called STRINGIZER, it is used to convert > number to string.
Please use osdep.h:stringify() instead of redefining this macro. > @@ -638,24 +638,18 @@ static int vdi_create(const char *filename, > QEMUOptionParameter *options) > logout("\n"); > > /* Read out options. */ > - while (options && options->name) { > - if (!strcmp(options->name, BLOCK_OPT_SIZE)) { > - bytes = options->value.n; > + if (opts) { > + bytes = qemu_opt_get_number(opts, BLOCK_OPT_SIZE, 0); > #if defined(CONFIG_VDI_BLOCK_SIZE) > - } else if (!strcmp(options->name, BLOCK_OPT_CLUSTER_SIZE)) { > - if (options->value.n) { > - /* TODO: Additional checks (SECTOR_SIZE * 2^n, ...). */ > - block_size = options->value.n; > - } > + block_size = qemu_opt_get_size(opts, > + BLOCK_OPT_CLUSTER_SIZE, > + DEFAULT_CLUSTER_SIZE); Please preserve the TODO comment. > #endif > #if defined(CONFIG_VDI_STATIC_IMAGE) > - } else if (!strcmp(options->name, BLOCK_OPT_STATIC)) { > - if (options->value.n) { > - image_type = VDI_TYPE_STATIC; > - } > -#endif > + if (qemu_opt_get_bool(opts, BLOCK_OPT_ENCRYPT, 0)) { > + image_type = VDI_TYPE_STATIC; s/BLOCK_OPT_ENCRYPT/BLOCK_OPT_STATIC/ > int disk_type; > int ret = -EIO; > > - /* Read out options */ > - total_size = get_option_parameter(options, BLOCK_OPT_SIZE)->value.n; > - > - disk_type_param = get_option_parameter(options, BLOCK_OPT_SUBFMT); > - if (disk_type_param && disk_type_param->value.s) { > - if (!strcmp(disk_type_param->value.s, "dynamic")) { > - disk_type = VHD_DYNAMIC; > - } else if (!strcmp(disk_type_param->value.s, "fixed")) { > - disk_type = VHD_FIXED; > + /* Read out opts */ > + if (opts) { > + total_size = qemu_opt_get_number(opts, BLOCK_OPT_SIZE, 0); > + disk_type_param = qemu_opt_get(opts, BLOCK_OPT_SUBFMT); > + if (disk_type_param) { > + if (!strcmp(disk_type_param, "dynamic")) { > + disk_type = VHD_DYNAMIC; > + } else if (!strcmp(disk_type_param, "fixed")) { > + disk_type = VHD_FIXED; > + } else { > + return -EINVAL; > + } > } else { > - return -EINVAL; > + disk_type = VHD_DYNAMIC; > } > - } else { > - disk_type = VHD_DYNAMIC; > } disk_type must be initialized even when opts == NULL. It's easiest to do: int disk_type = VHD_DYNAMIC; ... if (opts) { ... if (disk_type_param) { if (!strcmp(disk_type_param, "dynamic")) { disk_type = VHD_DYNAMIC; } else if (!strcmp(disk_type_param, "fixed")) { disk_type = VHD_FIXED; } else { return -EINVAL; } } }