[libvirt] [PATCH] esx: Improve VMX file name parsing and formatting

Daniel Veillard veillard at redhat.com
Wed Aug 11 10:18:57 UTC 2010


On Sat, Aug 07, 2010 at 09:54:34PM +0200, Matthias Bolte wrote:
> 2010/8/7 Matthias Bolte <matthias.bolte at googlemail.com>:
> > For parsing try to match by datastore mount path first, if that
> > fails fallback to /vmfs/volumes/<datastore>/<path> parsing. This
> > also fixes problems with GSX on Windows. Because GSX on Windows
> > doesn't use /vmfs/volumes/ style file names.
> >
> > For formatting use the datastore mount path too, instead of using
> > /vmfs/volumes/<datastore>/<path> as fixed format.
> > ---
> >  src/esx/esx_driver.c |  372 +++++++++++++++++++++++++++++++------------------
> >  1 files changed, 235 insertions(+), 137 deletions(-)
> >
> 
> > +
> > +    /* Strip trailing separators */
> > +    length = strlen(hostMount->mountInfo->path);
> > +
> > +    if (length > 0) {
> > +        tmp = hostMount->mountInfo->path + length - 1;
> > +
> > +        while (*tmp == separator && tmp > hostMount->mountInfo->path) {
> > +            --tmp;
> >         }
> 
> [skip removed code]
> 
> > +        length = tmp - hostMount->mountInfo->path;
> > +    }
> > +
> > +    /* Format as <mount>[/<directory>]/<file> */
> > +    virBufferAdd(&buffer, hostMount->mountInfo->path, length);
> > +
> 
> The trailing separators stripping it totally broken :(
> 
> This incremental diff fixes that:
> 
> 
> diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
> index 322c588..4fb357b 100644
> --- a/src/esx/esx_driver.c
> +++ b/src/esx/esx_driver.c
> @@ -286,14 +286,8 @@ esxFormatVMXFileName(const char *datastorePath,
> void *opaque)
>      /* Strip trailing separators */
>      length = strlen(hostMount->mountInfo->path);
> 
> -    if (length > 0) {
> -        tmp = hostMount->mountInfo->path + length - 1;
> -
> -        while (*tmp == separator && tmp > hostMount->mountInfo->path) {
> -            --tmp;
> -        }
> -
> -        length = tmp - hostMount->mountInfo->path;
> +    while (length > 0 && hostMount->mountInfo->path[length - 1] == separator) {
> +        --length;
>      }
> 
>      /* Format as <mount>[/<directory>]/<file> */
> 

  Okay, ACK :-)

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list