/** * g_dbus_error_set_dbus_error_valist: * @error: A pointer to a #GError or %NULL. * @dbus_error_name: D-Bus error name. * @dbus_error_message: D-Bus error message. * @format: (nullable): printf()-style format to prepend to @dbus_error_message or %NULL. * @var_args: Arguments for @format. * * Like g_dbus_error_set_dbus_error() but intended for language bindings. * * Since: 2.26 */ void g_dbus_error_set_dbus_error_valist (GError **error, const gchar *dbus_error_name, const gchar *dbus_error_message, const gchar *format, va_list var_args) { g_return_if_fail (error == NULL || *error == NULL); g_return_if_fail (dbus_error_name != NULL); g_return_if_fail (dbus_error_message != NULL); if (error == NULL) return; if (format != NULL) { gchar *message; gchar *s; message = g_strdup_vprintf (format, var_args); s = g_strdup_printf ("%s: %s", message, dbus_error_message); *error = g_dbus_error_new_for_dbus_error (dbus_error_name, s); g_free (s); g_free (message); } else { *error = g_dbus_error_new_for_dbus_error (dbus_error_name, dbus_error_message); } }
/** * g_dbus_error_set_dbus_error: * @error: A pointer to a #GError or %NULL. * @dbus_error_name: D-Bus error name. * @dbus_error_message: D-Bus error message. * @format: (nullable): printf()-style format to prepend to @dbus_error_message or %NULL. * @...: Arguments for @format. * * Does nothing if @error is %NULL. Otherwise sets *@error to * a new #GError created with g_dbus_error_new_for_dbus_error() * with @dbus_error_message prepend with @format (unless %NULL). * * Since: 2.26 */ void g_dbus_error_set_dbus_error (GError **error, const gchar *dbus_error_name, const gchar *dbus_error_message, const gchar *format, ...) { g_return_if_fail (error == NULL || *error == NULL); g_return_if_fail (dbus_error_name != NULL); g_return_if_fail (dbus_error_message != NULL); if (error == NULL) return; if (format == NULL) { *error = g_dbus_error_new_for_dbus_error (dbus_error_name, dbus_error_message); } else { va_list var_args; va_start (var_args, format); g_dbus_error_set_dbus_error_valist (error, dbus_error_name, dbus_error_message, format, var_args); va_end (var_args); } }
static void on_owner_changed (GObject *object, GParamSpec *pspec, gpointer user_data) { /* Owner shouldn't change durning a transaction * that messes with notifications, abort, abort. */ TransactionProgress *tp = user_data; tp->error = g_dbus_error_new_for_dbus_error ("org.projectatomic.rpmostreed.Error.Failed", "Bus owner changed, aborting."); transaction_progress_end (tp); }
DBusConnection * test_try_connect_to_bus (TestMainContext *ctx, const gchar *address, GError **gerror) { DBusConnection *conn; DBusError error = DBUS_ERROR_INIT; conn = dbus_connection_open_private (address, &error); if (conn == NULL) goto fail; if (!dbus_bus_register (conn, &error)) goto fail; g_assert (dbus_bus_get_unique_name (conn) != NULL); if (ctx != NULL && !test_connection_try_setup (ctx, conn)) { _DBUS_SET_OOM (&error); goto fail; } return conn; fail: if (gerror != NULL) *gerror = g_dbus_error_new_for_dbus_error (error.name, error.message); if (conn != NULL) { dbus_connection_close (conn); dbus_connection_unref (conn); } dbus_error_free (&error); return FALSE; }
static void on_transaction_progress (GDBusProxy *proxy, gchar *sender_name, gchar *signal_name, GVariant *parameters, gpointer user_data) { TransactionProgress *tp = user_data; if (g_strcmp0 (signal_name, "SignatureProgress") == 0) { /* We used to print the signature here, but doing so interferes with the * libostree HTTP progress, and it gets really, really verbose when doing * a deploy. Let's follow the Unix philosophy here: silence is success. */ } else if (g_strcmp0 (signal_name, "Message") == 0) { const gchar *message = NULL; g_variant_get_child (parameters, 0, "&s", &message); if (tp->in_status_line) add_status_line (tp, message, -1); else g_print ("%s\n", message); } else if (g_strcmp0 (signal_name, "TaskBegin") == 0) { /* XXX: whenever libglnx implements a spinner, this would be appropriate * here. */ const gchar *message = NULL; g_variant_get_child (parameters, 0, "&s", &message); g_print ("%s... ", message); } else if (g_strcmp0 (signal_name, "TaskEnd") == 0) { const gchar *message = NULL; g_variant_get_child (parameters, 0, "&s", &message); g_print ("%s\n", message); } else if (g_strcmp0 (signal_name, "PercentProgress") == 0) { const gchar *message = NULL; guint32 percentage; g_variant_get_child (parameters, 0, "&s", &message); g_variant_get_child (parameters, 1, "u", &percentage); add_status_line (tp, message, percentage); } else if (g_strcmp0 (signal_name, "DownloadProgress") == 0) { g_autofree gchar *line = NULL; guint64 start_time; guint64 elapsed_secs; guint outstanding_fetches; guint outstanding_writes; guint n_scanned_metadata; guint metadata_fetched; guint outstanding_metadata_fetches; guint total_delta_parts; guint fetched_delta_parts; guint total_delta_superblocks; guint64 total_delta_part_size; guint fetched; guint requested; guint64 bytes_transferred; guint64 bytes_sec; g_variant_get (parameters, "((tt)(uu)(uuu)(uuut)(uu)(tt))", &start_time, &elapsed_secs, &outstanding_fetches, &outstanding_writes, &n_scanned_metadata, &metadata_fetched, &outstanding_metadata_fetches, &total_delta_parts, &fetched_delta_parts, &total_delta_superblocks, &total_delta_part_size, &fetched, &requested, &bytes_transferred, &bytes_sec); line = transaction_get_progress_line (start_time, elapsed_secs, outstanding_fetches, outstanding_writes, n_scanned_metadata, metadata_fetched, outstanding_metadata_fetches, total_delta_parts, fetched_delta_parts, total_delta_superblocks, total_delta_part_size, fetched, requested, bytes_transferred, bytes_sec); add_status_line (tp, line, -1); } else if (g_strcmp0 (signal_name, "ProgressEnd") == 0) { end_status_line (tp); } else if (g_strcmp0 (signal_name, "Finished") == 0) { if (tp->error == NULL) { g_autofree char *error_message = NULL; gboolean success = FALSE; g_variant_get (parameters, "(bs)", &success, &error_message); if (!success) { tp->error = g_dbus_error_new_for_dbus_error ("org.projectatomic.rpmostreed.Error.Failed", error_message); } } transaction_progress_end (tp); } }