qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] Partial fix for vvfat + -snapshot
@ 2007-03-10 15:34 Lorenzo Campedelli
  0 siblings, 0 replies; only message in thread
From: Lorenzo Campedelli @ 2007-03-10 15:34 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 755 bytes --]

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

[-- Attachment #2: block.c.patch --]
[-- Type: text/x-patch, Size: 1241 bytes --]

--- 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;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-03-10 15:35 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-10 15:34 [Qemu-devel] Partial fix for vvfat + -snapshot Lorenzo Campedelli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).