value->next = NULL;
value->l = l;
- return virConfSetValue(conf, setting, value);
+ return virConfSetValue(conf, setting, &value);
}
value->next = NULL;
value->str = g_strdup(str);
- return virConfSetValue(conf, setting, value);
+ return virConfSetValue(conf, setting, &value);
}
}
}
- if (pciVal->list != NULL) {
- int ret = virConfSetValue(conf, "pci", pciVal);
- pciVal = NULL;
- if (ret < 0)
- return -1;
- }
+ if (pciVal->list != NULL &&
+ virConfSetValue(conf, "pci", &pciVal) < 0)
+ return -1;
return 0;
}
}
}
- if (serialVal->list != NULL) {
- int ret = virConfSetValue(conf, "serial", serialVal);
-
- serialVal = NULL;
- if (ret < 0)
- return -1;
- }
+ if (serialVal->list != NULL &&
+ virConfSetValue(conf, "serial", &serialVal) < 0)
+ return -1;
}
} else {
if (xenConfigSetString(conf, "serial", "none") < 0)
vfb->type = VIR_CONF_LIST;
vfb->list = g_steal_pointer(&disp);
- if (virConfSetValue(conf, "vfb", vfb) < 0) {
- vfb = NULL;
+ if (virConfSetValue(conf, "vfb", &vfb) < 0)
return -1;
- }
- vfb = NULL;
}
}
goto cleanup;
}
- if (netVal->list != NULL) {
- int ret = virConfSetValue(conf, "vif", netVal);
- netVal = NULL;
- if (ret < 0)
- goto cleanup;
- }
+ if (netVal->list != NULL &&
+ virConfSetValue(conf, "vif", &netVal) < 0)
+ goto cleanup;
return 0;
goto cleanup;
}
- if (vnumaVal->list != NULL) {
- int ret = virConfSetValue(conf, "vnuma", vnumaVal);
- vnumaVal = NULL;
- if (ret < 0)
- return -1;
- }
+ if (vnumaVal->list != NULL &&
+ virConfSetValue(conf, "vnuma", &vnumaVal) < 0)
+ return -1;
return 0;
goto cleanup;
}
- if (diskVal->list != NULL) {
- int ret = virConfSetValue(conf, "disk", diskVal);
- diskVal = NULL;
- if (ret < 0)
- return -1;
- }
+ if (diskVal->list != NULL &&
+ virConfSetValue(conf, "disk", &diskVal) < 0)
+ return -1;
return 0;
if (xenConfigSetString(conf, "usbdevice", usbdevices->list->str) < 0)
goto error;
} else {
- if (virConfSetValue(conf, "usbdevice", usbdevices) < 0) {
- usbdevices = NULL;
+ if (virConfSetValue(conf, "usbdevice", &usbdevices) < 0)
goto error;
- }
- usbdevices = NULL;
}
}
}
}
}
- if (usbctrlVal->list != NULL) {
- int ret = virConfSetValue(conf, "usbctrl", usbctrlVal);
- usbctrlVal = NULL;
- if (ret < 0)
- return -1;
- }
+ if (usbctrlVal->list != NULL &&
+ virConfSetValue(conf, "usbctrl", &usbctrlVal) < 0)
+ return -1;
return 0;
}
}
- if (usbVal->list != NULL) {
- int ret = virConfSetValue(conf, "usbdev", usbVal);
- usbVal = NULL;
- if (ret < 0)
- return -1;
- }
+ if (usbVal->list != NULL &&
+ virConfSetValue(conf, "usbdev", &usbVal) < 0)
+ return -1;
return 0;
}
goto cleanup;
}
- if (channelVal->list != NULL) {
- int ret = virConfSetValue(conf, "channel", channelVal);
- channelVal = NULL;
- if (ret < 0)
- goto cleanup;
- }
+ if (channelVal->list != NULL &&
+ virConfSetValue(conf, "channel", &channelVal) < 0)
+ goto cleanup;
return 0;
args->list = val;
}
- if (args->list != NULL) {
- if (virConfSetValue(conf, "device_model_args", args) < 0) {
- args = NULL;
- goto error;
- }
- args = NULL;
- }
+ if (args->list != NULL &&
+ virConfSetValue(conf, "device_model_args", &args) < 0)
+ goto error;
return 0;
goto cleanup;
}
- if (diskVal->list != NULL) {
- int ret = virConfSetValue(conf, "disk", diskVal);
- diskVal = NULL;
- if (ret < 0)
- goto cleanup;
- }
+ if (diskVal->list != NULL &&
+ virConfSetValue(conf, "disk", &diskVal) < 0)
+ goto cleanup;
return 0;
int
virConfSetValue(virConf *conf,
const char *setting,
- virConfValue *value)
+ virConfValue **value)
{
virConfEntry *cur;
virConfEntry *prev = NULL;
- if (value && value->type == VIR_CONF_STRING && value->str == NULL) {
+ if (!value) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("invalid use of conf API"));
+ return -1;
+ }
+
+ if (*value && (*value)->type == VIR_CONF_STRING && !(*value)->str) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("expecting a value for value of type %s"),
virConfTypeToString(VIR_CONF_STRING));
- virConfFreeValue(value);
+ g_clear_pointer(value, virConfFreeValue);
return -1;
}
cur = g_new0(virConfEntry, 1);
cur->comment = NULL;
cur->name = g_strdup(setting);
- cur->value = value;
+ cur->value = g_steal_pointer(value);
if (prev) {
cur->next = prev->next;
prev->next = cur;
}
} else {
virConfFreeValue(cur->value);
- cur->value = value;
+ cur->value = g_steal_pointer(value);
}
return 0;
}
int virConfSetValue(virConf *conf,
const char *setting,
- virConfValue *value);
+ virConfValue **value);
int virConfWalk(virConf *conf,
virConfWalkCallback callback,
void *opaque);