qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] Modify qemu-img can not create local filename contain ":"
@ 2014-03-03 14:02 Jun Li
  2014-03-03 17:47 ` Max Reitz
  0 siblings, 1 reply; 5+ messages in thread
From: Jun Li @ 2014-03-03 14:02 UTC (permalink / raw)
  To: qemu-devel; +Cc: Jun Li

Such as how to visit glusterfs:
file=gluster://1.2.3.4/testvol/a.img
file=gluster+tcp://1.2.3.4/testvol/a.img
file=gluster+tcp://1.2.3.4:24007/testvol/dir/a.img
file=gluster+tcp://[1:2:3:4:5:6:7:8]/testvol/dir/a.img
file=gluster+tcp://[1:2:3:4:5:6:7:8]:24007/testvol/dir/a.img
file=gluster+tcp://server.domain.com:24007/testvol/dir/a.img
file=gluster+rdma://1.2.3.4:24007/testvol/a.img
----
So if only the path contain "://", the path maybe contain a protocol. So use
strstr() to replace func strcspn().

Signed-off-by: Jun Li <junmuzi@gmail.com>
---
 block.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/block.c b/block.c
index 2fd5482..aead10e 100644
--- a/block.c
+++ b/block.c
@@ -237,12 +237,12 @@ static int path_has_protocol(const char *path)
         is_windows_drive_prefix(path)) {
         return 0;
     }
-    p = path + strcspn(path, ":/\\");
+    p = strstr(path, ":/\\");
 #else
-    p = path + strcspn(path, ":/");
+    p = strstr(path, "://");
 #endif
 
-    return *p == ':';
+    return p != NULL;
 }
 
 int path_is_absolute(const char *path)
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH] Modify qemu-img can not create local filename contain ":"
@ 2014-03-05 15:33 jun muzi
  0 siblings, 0 replies; 5+ messages in thread
From: jun muzi @ 2014-03-05 15:33 UTC (permalink / raw)
  To: Eric Blake; +Cc: qemu-devel

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

>>* Currently, a protocol prefix is only defined to end with a colon, not*
>>* with ":/" or "://". There are already protocol block drivers which do*
>*> not require a slash after the colon such as blkdebug or blkverify and I*
>* >deem it rather impossible to redefine their filename format now (in*
>>* order to make them use ":/").*

>It should ALWAYS be possible to open a file via absolute path, or via
>'./file:with:colon'.  That is, our check for a protocol should be any
>prefix that contains a ':' prior to a '/'.


Yes, check in the code,
static int path_has_protocol(const char *path)
{
    ...
    p = path + strcspn(path, ":/");
    ...
}
strcspn() function will return the anterior location of ":" or "/" in the
path. When the filename contains ':' via absolute path(eg:
/home/file:with:colon) or relative path(eg:./file:with:colon), the
strcspn() function will return the location of "/", then the
path_has_protocol() function will return 0.
Based on above discussion, when create image via :
# qemu-img create -f qcow2 ip-192.168.254.185\:asdf 5G
let qemu give more error information except "qemu-img: Unknown protocol
'ip-192.168.254.185:asdf'". Such as:
qemu-img: Unknown protocol 'ip-192.168.254.185:asdf'
Or using absolute path or relative path to create locale file.
---------
This maybe the most simple method to fixed this issue. thx.

Jun Li

[-- Attachment #2: Type: text/html, Size: 1720 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-03-05 15:33 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-03 14:02 [Qemu-devel] [PATCH] Modify qemu-img can not create local filename contain ":" Jun Li
2014-03-03 17:47 ` Max Reitz
2014-03-03 18:03   ` Eric Blake
2014-03-03 18:06     ` Max Reitz
  -- strict thread matches above, loose matches on Subject: below --
2014-03-05 15:33 jun muzi

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).