diff --git a/panels/printers/pp-details-dialog.c b/panels/printers/pp-details-dialog.c index 28b047234..4e5039f47 100644 --- a/panels/printers/pp-details-dialog.c +++ b/panels/printers/pp-details-dialog.c @@ -75,25 +75,6 @@ printer_name_changed (PpDetailsDialog *self) gtk_label_set_label (self->dialog_title, title); } -static void -ppd_names_free (gpointer user_data) -{ - PPDName **names = (PPDName **) user_data; - gint i; - - if (names) - { - for (i = 0; names[i]; i++) - { - g_free (names[i]->ppd_name); - g_free (names[i]->ppd_display_name); - g_free (names[i]); - } - - g_free (names); - } -} - static void set_ppd_cb (const gchar *printer_name, gboolean success, gpointer user_data); static void @@ -114,7 +95,6 @@ get_ppd_names_cb (PPDName **names, self->cancellable, set_ppd_cb, self); - ppd_names_free (names); } else { diff --git a/panels/printers/pp-utils.c b/panels/printers/pp-utils.c index aed1bb89d..39e31d847 100644 --- a/panels/printers/pp-utils.c +++ b/panels/printers/pp-utils.c @@ -1627,8 +1627,8 @@ typedef void (*GPACallback) (gchar **attribute_values, typedef struct { - gchar *attribute_name; gchar **ppds_names; + gchar *attribute_name; gchar **result; GPACallback callback; gpointer user_data; @@ -1655,6 +1655,8 @@ gpa_data_free (GPAData *data) { g_free (data->attribute_name); g_strfreev (data->ppds_names); + if (data->result != NULL) + g_strfreev (data->result); if (data->context) g_main_context_unref (data->context); g_free (data); @@ -1825,6 +1827,16 @@ static void gpn_data_free (GPNData *data) { g_free (data->printer_name); + if (data->result != NULL) + { + for (int i = 0; data->result[i]; i++) + { + g_free (data->result[i]->ppd_name); + g_free (data->result[i]->ppd_display_name); + g_free (data->result[i]); + } + g_free (data->result); + } g_clear_object (&data->cancellable); g_free (data); } @@ -1840,17 +1852,6 @@ get_ppd_names_async_cb (gchar **attribute_values, if (g_cancellable_is_cancelled (data->cancellable)) { - g_strfreev (attribute_values); - - for (i = 0; data->result[i]; i++) - { - g_free (data->result[i]->ppd_name); - g_free (data->result[i]); - } - - g_free (data->result); - data->result = NULL; - data->callback (NULL, data->printer_name, TRUE, @@ -1861,9 +1862,7 @@ get_ppd_names_async_cb (gchar **attribute_values, if (attribute_values) { for (i = 0; attribute_values[i]; i++) - data->result[i]->ppd_display_name = attribute_values[i]; - - g_free (attribute_values); + data->result[i]->ppd_display_name = g_strdup (attribute_values[i]); } data->callback (data->result, @@ -1956,7 +1955,7 @@ get_ppd_names_async_dbus_scb (GObject *source_object, if (result) { - gchar **ppds_names; + g_auto(GStrv) ppds_names = NULL; data->result = result; @@ -1969,8 +1968,6 @@ get_ppd_names_async_dbus_scb (GObject *source_object, get_ppd_names_async_cb, data); g_steal_pointer (&data); - - g_strfreev (ppds_names); } else {