Re: [Qemu-devel] [PATCH] rev3: support colon in filenames

Jamie Lokier
2009-07-15T18:14:15Z

Kevin Wolf wrote:
> Can we at least allow \, instead of ,, in parameter parsing, so that the
> backslash has the practical benefit of being a single universal escape
> character?

Is there a good reason why we cannot simply use \<char> to escape
_any_ character, in every context where a user-supplied
string/name/path/file is used?

I'm thinking of consistency here. Instead of special cases for
filenames, why not a standard scheme for all the places in command
lines _and_ the monitor where a name/path/file is needed?

There are many examples where it would be useful if unusual characters
didn't break things, they simply worked.

Examples: -vnc unix: path, -net port: device path, -net script path,
-net sock= path, -net group= groupname, tap and bt device names.

\<char> is an obvious scheme to standardise on given QEMU's unix shell
heritage. It would work equally well for command line options (which
are often comma-separated) and for monitor commands (which are often
space-separated).

It would have the nice property of being easy for management
programs/scripts to quote, without them having a special list of
characters to quote, without needing to update them if QEMU needs to
quote more characters in future for some reason.

Now, I see one significant hurdle with that: it's quite inconvenient
for Windows users, typing paths like c:\path\to\dir\file, if those
backslashes are stipped.

So I propose this as a universal quoting scheme:

\<char> where <char> is not ASCII alphanumeric.

Shell quoting is easy:

qfile=`printf %s "$file" | sed 's/[^0-9a-zA-Z]/\\\\&/g'`

qemu -drive file="$qfile",if=scsi,media=disk

Same quoting applied when sending the monitor a command to change a
CD-ROM file or add a USB disk, for example.

-- Jamie