flexarray_set(dm_args, num++, libxl_sprintf(gc, "-%s", disks[i].virtpath));
flexarray_set(dm_args, num++, disks[i].physpath);
}
+ libxl_device_disk_destroy(&disks[i]);
}
- /* FIXME: leaks disk paths */
free(disks);
flexarray_set(dm_args, num++, NULL);
return (char **) flexarray_contents(dm_args);
int num, i;
uint32_t stubdomid;
libxl_device_disk *disks;
+ int ret = ERROR_FAIL;
if (!disk->physpath) {
disk->physpath = "";
}
if (i == num) {
XL_LOG(ctx, XL_LOG_ERROR, "Virtual device not found");
- free(disks);
- return ERROR_FAIL;
+ goto out;
}
+
+ ret = 0;
+
libxl_device_disk_del(ctx, disks + i, 1);
libxl_device_disk_add(ctx, domid, disk);
stubdomid = libxl_get_stubdom_id(ctx, domid);
libxl_device_disk_add(ctx, stubdomid, disk);
disk->domid = domid;
}
- /* FIXME: leaks disk paths */
+out:
+ for (i = 0; i < num; i++)
+ libxl_device_disk_destroy(&disks[i]);
free(disks);
- return 0;
+ return ret;
}
/******************************************************************************/
int main_blocklist(int argc, char **argv)
{
int opt;
- int nb;
+ int i, nb;
libxl_device_disk *disks;
libxl_diskinfo diskinfo;
if (!disks) {
continue;
}
- for (; nb > 0; --nb, ++disks) {
- if (!libxl_device_disk_getinfo(&ctx, domid, disks, &diskinfo)) {
+ for (i=0; i<nb; i++) {
+ if (!libxl_device_disk_getinfo(&ctx, domid, &disks[i], &diskinfo)) {
/* Vdev BE hdl st evch rref BE-path*/
printf("%-5d %-3d %-6d %-5d %-6d %-8d %-30s\n",
diskinfo.devid, diskinfo.backend_id, diskinfo.frontend_id,
diskinfo.state, diskinfo.evtch, diskinfo.rref, diskinfo.backend);
+ libxl_diskinfo_destroy(&diskinfo);
}
+ libxl_device_disk_destroy(&disks[i]);
}
+ free(disks);
}
return 0;
}