[libvirt] [PATCH v7 3/4] vbox_tmpl.c: Patch for redefining snapshots
Daniel P. Berrange
berrange at redhat.com
Thu May 1 10:45:44 UTC 2014
On Fri, Apr 18, 2014 at 11:51:33AM +0200, Yohan BELLEGUIC wrote:
> The machine is unregistered and its vbox XML file is changed in order to
> add snapshot information. The machine is then registered with the
> snapshot to redefine.
> ---
> src/vbox/vbox_tmpl.c | 949 +++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 942 insertions(+), 7 deletions(-)
>
> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
> index ac000cf..f8667f6 100644
> --- a/src/vbox/vbox_tmpl.c
> +++ b/src/vbox/vbox_tmpl.c
> @@ -38,12 +38,12 @@
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> -#include <libxml/xmlwriter.h>
Ah, removing the bogus include I mentioned in patch 1. Can just squash
this change into the first patch instead.
> +static int
> +vboxSnapshotRedefine(virDomainPtr dom,
> + virDomainSnapshotDefPtr def,
> + bool isCurrent)
> +{
> + /*
> + * Now we have done this swap, we remove the snapshot xml file from the
> + * current machine location.
> + */
> + if (remove(currentSnapshotXmlFilePath) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Unable to delete file %s"), currentSnapshotXmlFilePath);
> + goto cleanup;
> + }
Small preference to use 'unlink' instead of remove, since we know
this is a plain file. Also use virReportSystemError(errno, _("....")...)
since we have an errno we can usefully provide here.
> + /*
> + * We save the snapshot xml file to retrieve the real read-write disk during the
> + * next define. This file is saved as "'machineLocation'/snapshot-'uuid'.xml"
> + */
> + VIR_FREE(currentSnapshotXmlFilePath);
> + if (virAsprintf(¤tSnapshotXmlFilePath, "%s%s.xml", machineLocationPath, snapshotMachineDesc->currentSnapshot) < 0)
> + goto cleanup;
> + char *snapshotContent = virDomainSnapshotDefFormat(NULL, def, VIR_DOMAIN_XML_SECURE, 0);
Need to check for snapshotContent == NULL here.
> + xmlDocPtr newXml = virXMLParse(NULL, snapshotContent, NULL);
Or this will cause a crash on OOM
> + VIR_FREE(snapshotContent);
> + if (newXml && xmlSaveFile(currentSnapshotXmlFilePath, newXml) < 0) {
This whole sequence of functions is wierd.
You have 'snapshotContent' which is a string containing an XML document.
You then parse this to get an xmlDocPtr.
You then call xmlSaveFile which turns xmlDocPtr back into a string and
writes it to a file.
IMHO you should just use virFileWriteStr(snapshotContent) and remove
this parsing
> + virReportError(VIR_ERR_XML_ERROR, "%s",
> + _("Unable to save new snapshot xml file"));
> + goto cleanup;
> + }
> + }
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list