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

Matthias Bolte matthias.bolte at googlemail.com
Wed Aug 11 23:23:23 UTC 2010


2010/8/11 Daniel Veillard <veillard at redhat.com>:
> 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
>

Thanks, pushed.

Matthias




More information about the libvir-list mailing list