goto error;
VIR_FREE(xml);
- if (!(obj = virInterfaceObjListAssignDef(data->dest, backup)))
+ if (!(obj = virInterfaceObjListAssignDef(data->dest, &backup)))
goto error;
- backup = NULL;
virInterfaceObjEndAPI(&obj);
virObjectUnlock(srcObj);
}
+/**
+ * virInterfaceObjListAssignDef:
+ * @interfaces: virInterface object list
+ * @def: new definition
+ *
+ * Assigns new definition to either an existing or newly created
+ * virInterface object. Upon successful return the virInterface
+ * object is the owner of @def and callers should use
+ * virInterfaceObjGetDef() if they need to access the definition
+ * as @def is set to NULL.
+ *
+ * Returns: a virInterface object instance on success, or
+ * NULL on error.
+ */
virInterfaceObj *
virInterfaceObjListAssignDef(virInterfaceObjList *interfaces,
- virInterfaceDef *def)
+ virInterfaceDef **def)
{
virInterfaceObj *obj;
virObjectRWLockWrite(interfaces);
- if ((obj = virInterfaceObjListFindByNameLocked(interfaces, def->name))) {
+ if ((obj = virInterfaceObjListFindByNameLocked(interfaces, (*def)->name))) {
virInterfaceDefFree(obj->def);
} else {
if (!(obj = virInterfaceObjNew()))
goto error;
- if (virHashAddEntry(interfaces->objsName, def->name, obj) < 0)
+ if (virHashAddEntry(interfaces->objsName, (*def)->name, obj) < 0)
goto error;
virObjectRef(obj);
}
- obj->def = def;
+ obj->def = g_steal_pointer(def);
virObjectRWUnlock(interfaces);
return obj;
if (!def)
return -1;
- if (!(obj = virInterfaceObjListAssignDef(privconn->ifaces, def)))
+ if (!(obj = virInterfaceObjListAssignDef(privconn->ifaces, &def)))
return -1;
- def = NULL;
virInterfaceObjSetActive(obj, true);
virInterfaceObjEndAPI(&obj);
if ((def = virInterfaceDefParseString(xmlStr, flags)) == NULL)
goto cleanup;
- if ((obj = virInterfaceObjListAssignDef(privconn->ifaces, def)) == NULL)
+ if ((obj = virInterfaceObjListAssignDef(privconn->ifaces, &def)) == NULL)
goto cleanup;
- def = NULL;
objdef = virInterfaceObjGetDef(obj);
ret = virGetInterface(conn, objdef->name, objdef->mac);