[libvirt] [glib PATCH V5] Add bindings for virDomainRestore*()
Zeeshan Ali (Khattak)
zeeshanak at gnome.org
Tue Jul 31 10:41:11 UTC 2012
Hi,
I committed your patch with the following minor issues fixed.
On Mon, Jul 30, 2012 at 1:18 PM, Jovanka Gulicoska
<jovanka.gulicoska at gmail.com> wrote:
> ---
> libvirt-gobject/libvirt-gobject-connection.c | 164 ++++++++++++++++++++++++++
> libvirt-gobject/libvirt-gobject-connection.h | 20 ++++
> libvirt-gobject/libvirt-gobject.sym | 4 +
> 3 files changed, 188 insertions(+)
>
> diff --git a/libvirt-gobject/libvirt-gobject-connection.c b/libvirt-gobject/libvirt-gobject-connection.c
> index 3a99034..dacac68 100644
> --- a/libvirt-gobject/libvirt-gobject-connection.c
> +++ b/libvirt-gobject/libvirt-gobject-connection.c
> @@ -1605,3 +1605,167 @@ gvir_connection_get_capabilities_finish(GVirConnection *conn,
>
> return g_object_ref(caps);
> }
> +
> +/**
> + * gvir_connection_restore_domain_from_file:
> + * @conn: a #GVirConnection
> + * @filename: path to input file
> + * @custom_conf: (allow-none): configuration for domain or NULL
> + * @flags: the flags
> + *
> + * Returns: TRUE on success, FALSE otherwise
> + *
> + * Restores the domain saved with #gvir_domain_save_to_file
Description comes before 'Returns' line.
> + */
> +gboolean gvir_connection_restore_domain_from_file(GVirConnection *conn,
> + gchar *filename,
> + GVirConfigDomain *custom_conf,
> + guint flags,
> + GError **err)
> +{
> + GVirConnectionPrivate *priv;
> + int ret;
> +
> + g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE);
> + g_return_val_if_fail((filename != NULL), FALSE);
> + g_return_val_if_fail((err == NULL) || (*err == NULL), FALSE);
> +
> + priv = conn->priv;
> +
> + if (flags || (custom_conf != NULL)) {
> + gchar *custom_xml = NULL;
> +
> + if (custom_conf != NULL)
> + custom_xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(custom_conf));
> +
> + ret = virDomainRestoreFlags(priv->conn, filename, custom_xml, flags);
> + g_free (custom_xml);
> + }
> + else {
'else' on the same line as previous '}'.
> + ret = virDomainRestore(priv->conn, filename);
> + }
> +
> + if (ret < 0) {
> + gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
> + 0,
> + "Unable to restore domain");
> +
> + return FALSE;
> + }
> +
> + return TRUE;
> +}
> +
> +typedef struct {
> + gchar *filename;
> + GVirConfigDomain *custom_conf;
> + guint flags;
> +} RestoreDomainFromFileData;
> +
> +static void restore_domain_from_file_data_free(RestoreDomainFromFileData *data)
> +{
> + g_free(data->filename);
> + if (data->custom_conf != NULL)
> + g_object_unref(data->custom_conf);
Actually you can make use of g_clear_object here as you did in
gvir_domain_save_to_file() patch.
> + g_slice_free(RestoreDomainFromFileData, data);
> +}
> +
> +
> +static void
> +gvir_connection_restore_domain_from_file_helper
> + (GSimpleAsyncResult *res,
> + GObject *object,
> + GCancellable *cancellable G_GNUC_UNUSED)
> +{
> + GVirConnection *conn = GVIR_CONNECTION(object);
> + RestoreDomainFromFileData *data;
> + GError *err = NULL;
> +
> + data = g_simple_async_result_get_op_res_gpointer(res);
> +
> + if (!gvir_connection_restore_domain_from_file(conn, data->filename,
> + data->custom_conf,
> + data->flags, &err))
Each argument on a newline when breaking function call on multiple lines.
> + g_simple_async_result_take_error(res, err);
> +}
> +
> +/**
> + * gvir_connection_restore_domain_from_file_async:
> + * @conn: a #GVirConnection
> + * @filename: path to input file
> + * @custom_conf: (allow-none): configuration for domain
> + * @flags: the flags
> + * @cancellable: (allow-none) (transfer none): cancellation object
> + * @callback: (scope async): completion callback
> + * @user_data: (closure): opaque data for callback
> + *
> + * Asynchronous variant of #gvir_connection_restore_domain_from_file
> + */
> +void
> +gvir_connection_restore_domain_from_file_async(GVirConnection *conn,
> + gchar *filename,
> + GVirConfigDomain *custom_conf,
> + guint flags,
> + GCancellable *cancellable,
> + GAsyncReadyCallback callback,
> + gpointer user_data)
> +{
> + GSimpleAsyncResult *res;
> + RestoreDomainFromFileData *data;
> +
> + g_return_if_fail(GVIR_IS_CONNECTION(conn));
> + g_return_if_fail(filename != NULL);
> + g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
> +
> + data = g_slice_new0(RestoreDomainFromFileData);
> + data->filename = g_strdup(filename);
> + if (custom_conf != NULL)
> + data->custom_conf = g_object_ref(custom_conf);
> + data->flags = flags;
> +
> + res = g_simple_async_result_new
> + (G_OBJECT(conn),
> + callback,
> + user_data,
> + gvir_connection_restore_domain_from_file_async);
> + g_simple_async_result_set_op_res_gpointer
> + (res,
> + data,
> + (GDestroyNotify)restore_domain_from_file_data_free);
> +
> + g_simple_async_result_run_in_thread
> + (res,
> + gvir_connection_restore_domain_from_file_helper,
> + G_PRIORITY_DEFAULT,
> + cancellable);
> +
> + g_object_unref(res);
> +}
> +
> +/**
> + * gvir_connection_restore_domain_from_file_finish:
> + * @conn: a #GVirConnection
> + * @result: (transfer none): async method result
> + * @err: Place-holder for possible errors
> + *
> + * Finishes the operation started by #gvir_restore_domain_from_file_async.
> + *
> + * Returns: TRUE if domain was restored successfully, FALSE otherwise.
> + */
> +gboolean
> +gvir_connection_restore_domain_from_file_finish(GVirConnection *conn,
> + GAsyncResult *result,
> + GError **err)
> +{
> + g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE);
> + g_return_val_if_fail(g_simple_async_result_is_valid
> + (result, G_OBJECT(conn),
> + gvir_connection_restore_domain_from_file_async),
> + FALSE);
Same here.
> +
> + if (g_simple_async_result_propagate_error(G_SIMPLE_ASYNC_RESULT(result),
> + err))
> + return FALSE;
> +
> + return TRUE;
> +}
> diff --git a/libvirt-gobject/libvirt-gobject-connection.h b/libvirt-gobject/libvirt-gobject-connection.h
> index c80eecf..d658b01 100644
> --- a/libvirt-gobject/libvirt-gobject-connection.h
> +++ b/libvirt-gobject/libvirt-gobject-connection.h
> @@ -202,6 +202,26 @@ gvir_connection_get_capabilities_finish(GVirConnection *conn,
> GAsyncResult *result,
> GError **err);
>
> +gboolean
> +gvir_connection_restore_domain_from_file(GVirConnection *conn,
> + gchar *filename,
> + GVirConfigDomain *custom_conf,
> + guint flags,
> + GError **err);
> +
> +void
> +gvir_connection_restore_domain_from_file_async(GVirConnection *conn,
> + gchar *filename,
> + GVirConfigDomain *custom_conf,
> + guint flags,
> + GCancellable *cancellable,
> + GAsyncReadyCallback callback,
> + gpointer user_data);
> +
> +gboolean
> +gvir_connection_restore_domain_from_file_finish(GVirConnection *conn,
> + GAsyncResult *result,
> + GError **err);
> G_END_DECLS
>
> #endif /* __LIBVIRT_GOBJECT_CONNECTION_H__ */
> diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
> index 54a093a..c31ed0f 100644
> --- a/libvirt-gobject/libvirt-gobject.sym
> +++ b/libvirt-gobject/libvirt-gobject.sym
> @@ -169,6 +169,10 @@ LIBVIRT_GOBJECT_0.0.9 {
> gvir_connection_get_capabilities_async;
> gvir_connection_get_capabilities_finish;
>
> + gvir_connection_restore_domain_from_file;
> + gvir_connection_restore_domain_from_file_async;
> + gvir_conecction_restore_domain_from_file_finish;
> +
> gvir_domain_start_async;
> gvir_domain_start_finish;
> } LIBVIRT_GOBJECT_0.0.8;
--
Regards,
Zeeshan Ali (Khattak)
FSF member#5124
More information about the libvir-list
mailing list