[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] drive_add: file names with spaces
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] drive_add: file names with spaces |
Date: |
Mon, 30 Oct 2017 17:03:36 +0000 |
User-agent: |
Mutt/1.9.1 (2017-09-22) |
* Programmingkid (address@hidden) wrote:
>
> > On Oct 30, 2017, at 10:32 AM, Dr. David Alan Gilbert <address@hidden> wrote:
> >
> > * Programmingkid (address@hidden) wrote:
> >>
> >>> On Oct 29, 2017, at 6:21 AM, Dr. David Alan Gilbert <address@hidden>
> >>> wrote:
> >>>
> >>> * Eric Blake (address@hidden) wrote:
> >>>> On 10/28/2017 06:44 AM, Programmingkid wrote:
> >>>>> I'm trying to use an image file that has spaces in its file name (and
> >>>>> sometimes in the path) to be used as a USB flash drive. When I try
> >>>>> adding the image file using the drive_add command I see this error:
> >>>>> drive_add: extraneous characters at the end of the line
> >>>>>
> >>>>> I have tried using single and double quotes around the file name but
> >>>>> this does not help. Is there a way to use files that have spaces in
> >>>>> it's name with drive_add?
> >>>>
> >>>> Not in HMP, which lacks quoting. (Unless you want to patch HMP to learn
> >>>> quoting)
> >>>
> >>> I think it's already got that code at least in some places.
> >>> monitor_parse_arguments calls get_str, and get_str understands " wrapped
> >>> arguments.
> >>>
> >>> drive_add 1 "file=foo bar"
> >>>
> >>> gives me:
> >>> Could not open 'foo bar': No such file or directory
> >>>
> >>> so I think that's doing the right thing.
> >>>
> >>> Dave
> >>>
> >>>> But using spaces in filenames works fine in QMP.
> >>>>
> >>>> --
> >>>> Eric Blake, Principal Software Engineer
> >>>> Red Hat, Inc. +1-919-301-3266
> >>>> Virtualization: qemu.org | libvirt.org
> >>>>
> >>>
> >>>
> >>> --
> >>> Dr. David Alan Gilbert / address@hidden / Manchester, UK
> >>
> >> Thank you so much for this info. It solved my problem :)
> >
> > Now, the real challenge is how to deal with a filename with a comma in;
> > drive_add 1 "file=foo,bar"
> > Could not open 'foo': No such file or directory
>
> I think the logical thing to do is not to depend on characters like spaces
> and commas to indicate a change in field. This would mean a change to how the
> user could specify arguments to a command. My first thought is to use a
> json-like syntax like this:
>
> CMD: drive_add
> File: <full path of file>
> ID: mydrive
>
> but this would still have the problem with newline characters in the file
> name. Spaces, commas, single and double quotes would be usable. Newline
> characters in file names are rare enough that we might consider ignoring this
> case altogether.
Well then you may as well almost use JSON.
> Another option is using a tag based system that would be able to handle every
> character. Something like this:
>
> drive_add 0 <file> /users/user/some path </file> <id> mydrive </id>
>
> The only way this system would fail if the text "</file>" was in the file
> name.
>
> Any solutions you wish to share?
There aren't many simple solutions; almost everything requires
a way to escape whatever character/tag you choose because that
could validly be in a filename.
If there's a way to escape the , so you could do something like
drive_add 1 "file=foo\,bar"
(I'm not sure if that's \, or \\, or whatever) then that would
work; but I've not dug to find the code that splits the file= opts
to find if it already has an escape mechanism)
Dave
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK