mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
vbox: Rewrite vboxDomainSnapshotGetParent
This commit is contained in:
parent
7528bf20a2
commit
cb348feeef
@ -6246,3 +6246,64 @@ int vboxDomainHasCurrentSnapshot(virDomainPtr dom,
|
|||||||
vboxIIDUnalloc(&iid);
|
vboxIIDUnalloc(&iid);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virDomainSnapshotPtr
|
||||||
|
vboxDomainSnapshotGetParent(virDomainSnapshotPtr snapshot,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
|
virDomainPtr dom = snapshot->domain;
|
||||||
|
VBOX_OBJECT_CHECK(dom->conn, virDomainSnapshotPtr, NULL);
|
||||||
|
vboxIIDUnion iid;
|
||||||
|
IMachine *machine = NULL;
|
||||||
|
ISnapshot *snap = NULL;
|
||||||
|
ISnapshot *parent = NULL;
|
||||||
|
PRUnichar *nameUtf16 = NULL;
|
||||||
|
char *name = NULL;
|
||||||
|
nsresult rc;
|
||||||
|
|
||||||
|
virCheckFlags(0, NULL);
|
||||||
|
|
||||||
|
if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (!(snap = vboxDomainSnapshotGet(data, dom, machine, snapshot->name)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
rc = gVBoxAPI.UISnapshot.GetParent(snap, &parent);
|
||||||
|
if (NS_FAILED(rc)) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("could not get parent of snapshot %s"),
|
||||||
|
snapshot->name);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
if (!parent) {
|
||||||
|
virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT,
|
||||||
|
_("snapshot '%s' does not have a parent"),
|
||||||
|
snapshot->name);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = gVBoxAPI.UISnapshot.GetName(parent, &nameUtf16);
|
||||||
|
if (NS_FAILED(rc) || !nameUtf16) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("could not get name of parent of snapshot %s"),
|
||||||
|
snapshot->name);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
VBOX_UTF16_TO_UTF8(nameUtf16, &name);
|
||||||
|
if (!name) {
|
||||||
|
virReportOOMError();
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = virGetDomainSnapshot(dom, name);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
VBOX_UTF8_FREE(name);
|
||||||
|
VBOX_UTF16_FREE(nameUtf16);
|
||||||
|
VBOX_RELEASE(snap);
|
||||||
|
VBOX_RELEASE(parent);
|
||||||
|
VBOX_RELEASE(machine);
|
||||||
|
vboxIIDUnalloc(&iid);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -1523,72 +1523,6 @@ vboxDomainSnapshotGet(vboxGlobalData *data,
|
|||||||
return snapshot;
|
return snapshot;
|
||||||
}
|
}
|
||||||
|
|
||||||
static virDomainSnapshotPtr
|
|
||||||
vboxDomainSnapshotGetParent(virDomainSnapshotPtr snapshot,
|
|
||||||
unsigned int flags)
|
|
||||||
{
|
|
||||||
virDomainPtr dom = snapshot->domain;
|
|
||||||
VBOX_OBJECT_CHECK(dom->conn, virDomainSnapshotPtr, NULL);
|
|
||||||
vboxIID iid = VBOX_IID_INITIALIZER;
|
|
||||||
IMachine *machine = NULL;
|
|
||||||
ISnapshot *snap = NULL;
|
|
||||||
ISnapshot *parent = NULL;
|
|
||||||
PRUnichar *nameUtf16 = NULL;
|
|
||||||
char *name = NULL;
|
|
||||||
nsresult rc;
|
|
||||||
|
|
||||||
virCheckFlags(0, NULL);
|
|
||||||
|
|
||||||
vboxIIDFromUUID(&iid, dom->uuid);
|
|
||||||
rc = VBOX_OBJECT_GET_MACHINE(iid.value, &machine);
|
|
||||||
if (NS_FAILED(rc)) {
|
|
||||||
virReportError(VIR_ERR_NO_DOMAIN, "%s",
|
|
||||||
_("no domain with matching UUID"));
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(snap = vboxDomainSnapshotGet(data, dom, machine, snapshot->name)))
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
rc = snap->vtbl->GetParent(snap, &parent);
|
|
||||||
if (NS_FAILED(rc)) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("could not get parent of snapshot %s"),
|
|
||||||
snapshot->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
if (!parent) {
|
|
||||||
virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT,
|
|
||||||
_("snapshot '%s' does not have a parent"),
|
|
||||||
snapshot->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = parent->vtbl->GetName(parent, &nameUtf16);
|
|
||||||
if (NS_FAILED(rc) || !nameUtf16) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("could not get name of parent of snapshot %s"),
|
|
||||||
snapshot->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
VBOX_UTF16_TO_UTF8(nameUtf16, &name);
|
|
||||||
if (!name) {
|
|
||||||
virReportOOMError();
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = virGetDomainSnapshot(dom, name);
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
VBOX_UTF8_FREE(name);
|
|
||||||
VBOX_UTF16_FREE(nameUtf16);
|
|
||||||
VBOX_RELEASE(snap);
|
|
||||||
VBOX_RELEASE(parent);
|
|
||||||
VBOX_RELEASE(machine);
|
|
||||||
vboxIIDUnalloc(&iid);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static virDomainSnapshotPtr
|
static virDomainSnapshotPtr
|
||||||
vboxDomainSnapshotCurrent(virDomainPtr dom,
|
vboxDomainSnapshotCurrent(virDomainPtr dom,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
|
@ -584,6 +584,9 @@ virDomainSnapshotPtr
|
|||||||
vboxDomainSnapshotLookupByName(virDomainPtr dom, const char *name,
|
vboxDomainSnapshotLookupByName(virDomainPtr dom, const char *name,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int vboxDomainHasCurrentSnapshot(virDomainPtr dom, unsigned int flags);
|
int vboxDomainHasCurrentSnapshot(virDomainPtr dom, unsigned int flags);
|
||||||
|
virDomainSnapshotPtr
|
||||||
|
vboxDomainSnapshotGetParent(virDomainSnapshotPtr snapshot,
|
||||||
|
unsigned int flags);
|
||||||
|
|
||||||
/* Version specified functions for installing uniformed API */
|
/* Version specified functions for installing uniformed API */
|
||||||
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
|
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user