Hi, the attached patch is an attempt to fix support of virtual FAT disk images when used with -snapshot option. This combination doesn't work anymore in 0.9.0, and the reason seems to be that code in block.c that handles -snapshot, completely disregards the different "filename" format used for vvfat.
The patch only restores the -hdX fat:dirname functionality, while additional options such as :rw:, :floppy: :32: etc, still fail, as some functions (e.g. path_combine() and path_is_absolute()) only support the "fat:" prefix. I'm not sure the fix is correct (I doubt code in block.c should know specific issues of different drivers), but it works for my needs, and maybe somebody else is interested. The patch is agains 0.9.0. Best Regards, Lorenzo
--- qemu-0.9.0/block.c.orig 2007-03-10 12:53:27.000000000 +0100 +++ qemu-0.9.0/block.c 2007-03-10 16:22:51.000000000 +0100 @@ -331,6 +331,7 @@ if (flags & BDRV_O_SNAPSHOT) { BlockDriverState *bs1; + BlockDriver *drv1; int64_t total_size; /* if snapshot, we create a temporary backing file and open it @@ -346,10 +347,22 @@ return -1; } total_size = bdrv_getlength(bs1) >> SECTOR_BITS; + drv1 = bs1->drv; bdrv_delete(bs1); get_tmp_filename(tmp_filename, sizeof(tmp_filename)); - realpath(filename, backing_filename); + /* + * for vvfat protocol the string "fat:<options>:" should remain + * the prefix of the filename even after realpath() call ... + */ + if (drv1 == &bdrv_vvfat) { + int i = strrchr(filename, ':') - filename + 1; + + strncpy(backing_filename, filename, i); + realpath(filename + i, backing_filename + i); + } else { + realpath(filename, backing_filename); + } if (bdrv_create(&bdrv_qcow2, tmp_filename, total_size, backing_filename, 0) < 0) { return -1;
_______________________________________________ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel