[libvirt] [PATCH] esx: Rework datastore path parsing and handling

Matthias Bolte matthias.bolte at googlemail.com
Thu Sep 2 22:00:43 UTC 2010


2010/9/1 Eric Blake <eblake at redhat.com>:
> On 08/26/2010 04:37 PM, Matthias Bolte wrote:
>>
>> Instead of splitting the path part of a datastore path into
>> directory and file name, keep this in one piece. An example:
>>
>>   "[datastore] directory/file"
>>
>> was split into this before:
>>
>>   datastoreName = "datastore"
>>   directoryName = "directory"
>>   fileName = "file"
>>
>> Now it's split into this:
>>
>>   datastoreName = "datastore"
>>   directoryName = "directory"
>>   directoryAndFileName = "directory/file"
>
> Seems reasonable.
>
>> This simplifies code using esxUtil_ParseDatastorePath, because
>> directoryAndFileName is used more often than fileName. Also the
>> old approach expected the datastore path to reference a actual
>
> s/ a / an /

I'll fix that before pushing.

>> @@ -52,8 +52,7 @@ typedef struct _esxVMX_Data esxVMX_Data;
>>
>>  struct _esxVMX_Data {
>>      esxVI_Context *ctx;
>> -    const char *datastoreName;
>> -    const char *directoryName;
>> +    char *datastorePathWithoutFileName;
>
> I guess losing the const here is okay.

It should have never been const in the first place.

>> @@ -2612,8 +2608,9 @@ esxDomainDumpXML(virDomainPtr domain, int flags)
>>      esxVI_ObjectContent_Free(&virtualMachine);
>>      VIR_FREE(datastoreName);
>>      VIR_FREE(directoryName);
>> -    VIR_FREE(fileName);
>> +    VIR_FREE(directoryAndFileName);
>>      VIR_FREE(url);
>> +    VIR_FREE(data.datastorePathWithoutFileName);
>>      VIR_FREE(vmx);
>>      virDomainDefFree(def);
>>
>> @@ -2640,8 +2637,7 @@ esxDomainXMLFromNative(virConnectPtr conn, const
>> char *nativeFormat,
>>      }
>>
>>      data.ctx = priv->primary;
>> -    data.datastoreName = "?";
>> -    data.directoryName = "?";
>> +    data.datastorePathWithoutFileName = (char *)"[?] ?";
>
> Are you missing a strdup() here?  I'm worried that the
> VIR_FREE(data.datastorePathWithoutFileName) in esxDomainDumpXML will now try
> to free static storage.

This is in esxDomainXMLFromNative, data.datastorePathWithoutFileName
doesn't get freed here, so not strdup'ing is fine here.

In esxDomainDumpXML data.datastorePathWithoutFileName is allocated via
virAsprintf and therefore it need to be freed in esxDomainDumpXML.

So nothing to change here.

>> diff --git a/src/esx/esx_storage_driver.c b/src/esx/esx_storage_driver.c
>> index af8876a..d2d8f22 100644
>> --- a/src/esx/esx_storage_driver.c
>> +++ b/src/esx/esx_storage_driver.c
>> @@ -611,10 +611,8 @@ esxStoragePoolListStorageVolumes(virStoragePoolPtr
>> pool, char **const names,
>>      esxVI_HostDatastoreBrowserSearchResults *searchResultsList = NULL;
>>      esxVI_HostDatastoreBrowserSearchResults *searchResults = NULL;
>>      esxVI_FileInfo *fileInfo = NULL;
>> -    char *datastoreName = NULL;
>> -    char *directoryName = NULL;
>> -    char *fileName = NULL;
>> -    char *prefix = NULL;
>> +    char *directoryAndFileName = NULL;
>> +    int length;
>
> s/int/size_t/
>
>> +++ b/src/esx/esx_vi.c
>> @@ -2946,7 +2946,9 @@ esxVI_LookupFileInfoByDatastorePath(esxVI_Context
>> *ctx,
>>      int result = -1;
>>      char *datastoreName = NULL;
>>      char *directoryName = NULL;
>> +    char *directoryAndFileName = NULL;
>>      char *fileName = NULL;
>> +    int length;
>
> s/int/size_t/

I'll fix those two before pushing.

Matthias




More information about the libvir-list mailing list