On Fri, Jul 29, 2011 at 12:49:33AM -0400, Devin Nakamura wrote: > +int bdrv_open_conversion_target(BlockDriverState **bs, BlockDriverState > *file, > + BlockConversionOptions *drv_options, > + QEMUOptionParameter *usr_options, > + const char *target_fmt) > +{ > + BlockDriver *drv; > + BlockDriverState *bss; > + > + drv = bdrv_find_format(target_fmt); > + if (!drv) { > + return -ENOENT; > + } > + > + if (!drv->bdrv_open_conversion_target) { > + return -ENOTSUP; > + } > + > + *bs = bdrv_new(""); > + bss = *bs; > + bss->file = file; > + bss->total_sectors = drv_options->image_size >> BDRV_SECTOR_BITS; > + bss->encrypted = 0; > + bss->valid_key = 0; > + bss->open_flags = 0; > + /* buffer_alignment defaulted to 512, drivers can change this value */ > + bss->buffer_alignment = 512; > + bss->opaque = qemu_mallocz(drv->instance_size); > + bss->drv = drv; > + return drv->bdrv_open_conversion_target(bss, drv_options, usr_options);
Normally a function that fails does not leave anything allocated. Please delete bss and *bs = NULL before returning an error. Stefan