Re: [PATCH] support colon in filenames

Kevin Wolf
2009-06-26T06:55:03Z

Ram Pai schrieb:
> On Thu, 2009-06-25 at 11:14 +0200, Kevin Wolf wrote:
>> Ram Pai schrieb:
>>> Copying the qemu-devel mailing list too.
>>>
>>> On Wed, 2009-06-24 at 09:58 -0700, Ram Pai wrote:
>>>> Problem: It is impossible to feed filenames with the character colon because
>>>> qemu interprets such names as a protocol. For example a filename scsi:0,
>>>> is interpreted as a protocol by name "scsi".
>>>>
>>>> This patch allows users to espace colon characters. For example the above filename
>>>> can now be expressed as 'scsi\:0'
>>>>
>>>> Here are couple of examples:
>>>>
>>>> ndb:\::9999 is treated as a ndb protocol with a hostname ':' on port 9999
>>>> scsi\:0\:abc is a local file scsi:0:abc
>>>> http\://myweb is a local file by name http://myweb
>>>> nbd\::localhost:2558 is a protocol by name nbd:
>> Is there any use in having a host named : or protocol nbd:? I don't
>> think so.
>
> I do not see the utility either. However if one does find a novel use,
> the syntax is expressive enough.
>
>> The other examples could be achieved much easier by assigning
>> the file: protocol to raw, so we would have:
>> file:scsi:0:abc
>> file:http://myweb
>
> yes. This is something if implemented; would help. But then its another
> mechanism for expression. It has to be a separate patch built on top of
> this patch, because you will still need escaping characters like space,
> comma, etc

The problem with the handling of colon, comma and space is that there
isn't one central place where they are used in some other way and could
be escaped.

As you know, colons are interpreted when extracting the protocol from
the file name, so somewhere in block.c. Commas are interpreted when
separating options, somewhere in vl.c. Spaces, I think, aren't a problem
in qemu itself but must be properly escaped in the shell. I think you
see why it's difficult to handle all cases uniformly.

>> This solution wasn't accepted last time because it wouldn't solve the
>> problems with other characters like commas (they need to be escaped as
>> double comma on the command line) and that won't be solved by this patch
>> either.
>
> This patch does handle commas and any other character as long as it is
> escaped using backslashes.
>
> I just checked the man page and it says that commas in the filename can
> be escaped by commas :( . Ok i will add that feature to my patch and
> resend it.

Try it, it works with no change on your side. Commas are handled
elsewhere. It's just that you still need to say "file=foo,,bar" instead
of "file=foo\,bar" because otherwise it would be split up into two
options "file=foo\" and "bar".

Kevin