}
+static void
+qemuDomainDiskInfoFree(void *value, const void *name ATTRIBUTE_UNUSED)
+{
+ struct qemuDomainDiskInfo *info = value;
+
+ VIR_FREE(info->nodename);
+ VIR_FREE(info);
+}
+
+
virHashTablePtr
qemuMonitorGetBlockInfo(qemuMonitorPtr mon)
{
QEMU_CHECK_MONITOR_NULL(mon);
- if (!(table = virHashCreate(32, virHashValueFree)))
+ if (!(table = virHashCreate(32, qemuDomainDiskInfoFree)))
return NULL;
if (mon->json)
for (i = 0; i < virJSONValueArraySize(devices); i++) {
virJSONValuePtr dev;
+ virJSONValuePtr image;
struct qemuDomainDiskInfo *info;
const char *thisdev;
const char *status;
+ const char *nodename;
if (!(dev = qemuMonitorJSONGetBlockDev(devices, i)))
goto cleanup;
info->tray = true;
/* presence of 'inserted' notifies that a medium is in the device */
- if (!virJSONValueObjectGetObject(dev, "inserted"))
+ if ((image = virJSONValueObjectGetObject(dev, "inserted"))) {
+ if ((nodename = virJSONValueObjectGetString(image, "node-name")))
+ ignore_value(VIR_STRDUP(info->nodename, nodename));
+ } else {
info->empty = true;
+ }
/* Missing io-status indicates no error */
if ((status = virJSONValueObjectGetString(dev, "io-status"))) {