mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
util: storage: Turn virStorageSource into a virObject
To allow tracking a single virStorageSource in multiple structures without extra hassle allow refcounting by turining it into an object. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
parent
dcda2bf4c1
commit
53a0fa7366
@ -47,6 +47,8 @@
|
||||
|
||||
VIR_LOG_INIT("util.storagefile");
|
||||
|
||||
static virClassPtr virStorageSourceClass;
|
||||
|
||||
VIR_ENUM_IMPL(virStorage, VIR_STORAGE_TYPE_LAST,
|
||||
"none",
|
||||
"file",
|
||||
@ -2558,30 +2560,49 @@ virStorageSourceClear(virStorageSourcePtr def)
|
||||
|
||||
virStorageSourceInitiatorClear(&def->initiator);
|
||||
|
||||
memset(def, 0, sizeof(*def));
|
||||
/* clear everything except the class header as the object APIs
|
||||
* will break otherwise */
|
||||
memset((char *) def + sizeof(def->parent), 0,
|
||||
sizeof(*def) - sizeof(def->parent));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
virStorageSourceDispose(void *obj)
|
||||
{
|
||||
virStorageSourcePtr src = obj;
|
||||
|
||||
virStorageSourceClear(src);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
virStorageSourceOnceInit(void)
|
||||
{
|
||||
if (!VIR_CLASS_NEW(virStorageSource, virClassForObject()))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
VIR_ONCE_GLOBAL_INIT(virStorageSource);
|
||||
|
||||
|
||||
virStorageSourcePtr
|
||||
virStorageSourceNew(void)
|
||||
{
|
||||
virStorageSourcePtr ret = NULL;
|
||||
|
||||
if (VIR_ALLOC(ret) < 0)
|
||||
if (virStorageSourceInitialize() < 0)
|
||||
return NULL;
|
||||
|
||||
return ret;
|
||||
return virObjectNew(virStorageSourceClass);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
virStorageSourceFree(virStorageSourcePtr def)
|
||||
{
|
||||
if (!def)
|
||||
return;
|
||||
|
||||
virStorageSourceClear(def);
|
||||
VIR_FREE(def);
|
||||
virObjectUnref(def);
|
||||
}
|
||||
|
||||
|
||||
|
@ -242,6 +242,8 @@ typedef virStorageSource *virStorageSourcePtr;
|
||||
* IMPORTANT: When adding fields to this struct it's also necessary to add
|
||||
* appropriate code to the virStorageSourceCopy deep copy function */
|
||||
struct _virStorageSource {
|
||||
virObject parent;
|
||||
|
||||
unsigned int id; /* backing chain identifier, 0 is unset */
|
||||
int type; /* virStorageType */
|
||||
char *path;
|
||||
|
Loading…
x
Reference in New Issue
Block a user