[libvirt] [PATCH] Implement vol delete for disk pools

Cole Robinson crobinso at redhat.com
Mon Sep 8 13:33:40 UTC 2008


Daniel Veillard wrote:
> On Fri, Sep 05, 2008 at 11:17:27PM -0400, Cole Robinson wrote:
>>  static int
>>  virStorageBackendDiskDeleteVol(virConnectPtr conn,
>> -                               virStoragePoolObjPtr pool ATTRIBUTE_UNUSED,
>> -                               virStorageVolDefPtr vol ATTRIBUTE_UNUSED,
>> +                               virStoragePoolObjPtr pool,
>> +                               virStorageVolDefPtr vol,
>>                                 unsigned int flags ATTRIBUTE_UNUSED)
>>  {
>> -    /* delete a partition */
>> -    virStorageReportError(conn, VIR_ERR_NO_SUPPORT,
>> -                          _("Disk pools are not yet supported"));
>> -    return -1;
>> +    char *part_num = NULL;
>> +    int n;
>> +    char devpath[PATH_MAX];
>> +    char *devname, *srcname;
>> +
>> +    if ((n = readlink(vol->target.path, devpath, sizeof(devpath))) < 0 &&
>> +        errno != EINVAL) {
>> +        virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
>> +                              _("Couldn't read volume target path '%s'. %s"),
>> +                              vol->target.path, strerror(errno));
>> +        return -1;
>> +    } else if (n <= 0) {
>> +        strncpy(devpath, vol->target.path, PATH_MAX);
>> +    } else {
>> +        devpath[n] = '\0';
>> +    }
>> +
>> +    devname = basename(devpath);
>> +    srcname = basename(pool->def->source.devices[0].path);
> 
>   This seems to leak the two strings and not check for errors. That
> would need to be fixed before being commited IMHO
> 

glibc defines basename in string.h as:

char *
basename (filename)
     const char *filename;
{
  char *p = strrchr (filename, '/');
  return p ? p + 1 : (char *) filename;
}

So there doesn't seem to be any cleanup or failure catching
necessary.

Thanks,
Cole




More information about the libvir-list mailing list