qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH][RFC] Handling ':' on filenames


From: Uri Lublin
Subject: Re: [Qemu-devel] [PATCH][RFC] Handling ':' on filenames
Date: Sun, 08 Mar 2009 13:28:31 +0200
User-agent: Thunderbird 2.0.0.19 (X11/20090105)

Eduardo Habkost wrote:
This patch fixes this issue:

  $ qemu-img create -f qcow2 /tmp/a:b 1G
  $ qemu-system-x86_64 -hda qcow2:/tmp/a:b
  qemu: could not open disk image /tmp/a:b
  $

This patch looks good to me with the following comments:

1. I think the example above is wrong.
   a. There is no protocol "qcow2"
   b. We do not want to use "qcow2:/tmp/a:b" as filenames (been there).
      We want to use -drive file=/tmp/a:b,format=qcow2 (and
      similar "qemu-img info -f ").
   c. But, without this patch, even when using appropriate -drive, we'd
      still get the same result (could not open disk image).
      Qemu considers "/tmp/a" to be a protocol, which does not exist,
      so Qemu fails to open the image.
      With this patch, Qemu opens the file successfully.


Based on a suggestion by Daniel Berrange.

However, this is still just a workaround. The semantics of filenames
containing colon characters (and how this can be escaped, avoided,
or worked around) are not very clear.

Going further, what if we stop using "protocol:filename" strings
internally, except where the user interface or external data really
requires this format?

2. Do you mean something like adding a '-drive protocol=xxx' option ?


Signed-off-by: Eduardo Habkost <address@hidden>
---
 block.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/block.c b/block.c
index 7c744c7..04488d6 100644
--- a/block.c
+++ b/block.c
@@ -236,6 +236,14 @@ static BlockDriver *find_protocol(const char *filename)
         is_windows_drive_prefix(filename))
         return &bdrv_raw;
 #endif
+
+    /* Protocol name will never start with a slash.
+     * This allows the user to specify absolute filenames
+     * containing a ":" character.
+     */
+    if (*filename == '/')
+        return &bdrv_raw;

3. The patch limits protocols names to not start with '/' (full paths).
   I think we should apply the same logic to relative paths, so
   protocol names would not start with '.' as well (no protocol
   starts with '.' today):

 +   if ((*filename == '/') || (*filename == '.'))
 +       return &bdrv_raw;

4. Note that this patch does not limit image formats to raw, it
   just says "use no protocols for full/relative paths".

+
     p = strchr(filename, ':');
     if (!p)
         return &bdrv_raw;


Regards,
    Uri.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]