[libvirt] [glib PATCH V4] Add bindings for virDomainSave*()
Zeeshan Ali (Khattak)
zeeshanak at gnome.org
Thu Jul 12 17:35:18 UTC 2012
Only 3 issues, 2 very small ones.
On Thu, Jul 12, 2012 at 7:39 AM, Jovanka Gulicoska
<jovanka.gulicoska at gmail.com> wrote:
> ---
> libvirt-gobject/libvirt-gobject-domain.c | 152 ++++++++++++++++++++++++++++++
> libvirt-gobject/libvirt-gobject-domain.h | 18 ++++
> libvirt-gobject/libvirt-gobject.sym | 3 +
> 3 files changed, 173 insertions(+)
>
> diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c
> index 088cd33..d803829 100644
> --- a/libvirt-gobject/libvirt-gobject-domain.c
> +++ b/libvirt-gobject/libvirt-gobject-domain.c
> @@ -557,6 +557,158 @@ gboolean gvir_domain_reboot(GVirDomain *dom,
> }
>
> /**
> + * gvir_domain_save_to_file:
> + * @dom: the domain
> + * @filename: path to the output file
> + * @custom_conf: configuration for domain or NULL
You forgot to declared this as nullable.
> + * @flags: the flags
> + *
> + * Returns: TRUE on success, FALSE otherwise
> + */
> +gboolean gvir_domain_save_to_file(GVirDomain *dom,
> + gchar *filename,
> + GVirConfigDomain *custom_conf,
> + guint flags,
> + GError **err)
> +{
> + GVirDomainPrivate *priv;
> + gchar *custom_xml = NULL;
This is only used into the 'if' block below so better move this line there.
> + int ret;
> +
> + g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
> + g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
> +
> + priv = dom->priv;
> +
> + if (flags || custom_conf != NULL) {
> + if (custom_conf != NULL)
> + custom_xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(custom_conf));
> +
> + ret = virDomainSaveFlags(priv->handle, filename, custom_xml, flags);
> + g_free(custom_xml);
> + }
> + else {
> + ret = virDomainSave(priv->handle, filename);
> + }
> +
> + if (ret < 0) {
> + gvir_set_error_literal(err, GVIR_DOMAIN_ERROR,
> + 0,
> + "Unable to save domain to file");
> + return FALSE;
> + }
> +
> + return TRUE;
> +}
> +
> +typedef struct {
> + gchar *filename;
> + gchar *custom_xml;
> + guint flags;
> +} DomainSaveToFileData;
> +
> +static void domain_save_to_file_data_free(DomainSaveToFileData *data)
> +{
> + g_free(data->filename);
> + g_free(data->custom_xml);
> + g_slice_free(DomainSaveToFileData, data);
> +}
> +
> +static void
> +gvir_domain_save_to_file_helper(GSimpleAsyncResult *res,
> + GObject *object,
> + GCancellable *cancellable G_GNUC_UNUSED)
> +{
> + GVirDomain *dom = GVIR_DOMAIN(object);
> + DomainSaveToFileData *data;
> + GVirConfigDomain *conf;
> + GError *err = NULL;
> +
> + data = g_simple_async_result_get_op_res_gpointer(res);
> + conf = gvir_domain_get_config(dom, data->flags, &err);
> +
> + if (!gvir_domain_save_to_file(dom, data->filename, conf, data->flags, &err))
> + g_simple_async_result_take_error(res, err);
> +}
> +
> +/**
> + * gvir_domain_save_to_file_async:
> + * @dom: the domain
> + * @filename: path to output file
> + * @custom_conf: (allow-none): configuration for domain or NULL
> + * @flags: the flags
> + * @cancellable: (allow-none) (transfer none): cancallation object
> + * @callback: (scope async): completion callback
> + * @user_data: (closure): opaque data for callback
> + *
> + * Asynchronous variant of #gvir_domain_save_to_file
> + */
> +void gvir_domain_save_to_file_async(GVirDomain *dom,
> + gchar *filename,
> + GVirConfigDomain *custom_conf,
> + guint flags,
> + GCancellable *cancellable,
> + GAsyncReadyCallback callback,
> + gpointer user_data)
> +{
> + GSimpleAsyncResult *res;
> + DomainSaveToFileData *data;
> + gchar *xml = NULL;
> +
> + g_return_if_fail(GVIR_IS_DOMAIN(dom));
> + g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
> +
> + if (custom_xml != NULL)
> + xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(custom_conf));
> +
> + data = g_slice_new0(DomainSaveToFileData);
> + data->filename = g_strdup(filename);
> + data->custom_xml = g_strdup(xml);
'xml' is being leaked here. You want to directly assign the return
value of gvir_config_object_to_xml() to data->custom_xml (no copying
needed then).
--
Regards,
Zeeshan Ali (Khattak)
FSF member#5124
More information about the libvir-list
mailing list