Skip to content

Commit

Permalink
Use g_autoptr(GString), fix several memory leaks
Browse files Browse the repository at this point in the history
Simplify related functions.
  • Loading branch information
qarkai authored and caclark committed Jan 11, 2025
1 parent 0b20b06 commit 97d189c
Show file tree
Hide file tree
Showing 21 changed files with 154 additions and 284 deletions.
54 changes: 18 additions & 36 deletions src/bar-gps.cc
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,6 @@ void bar_pane_gps_dnd_receive(GtkWidget *pane, GdkDragContext *,
gint geocoded_count;
gdouble latitude;
gdouble longitude;
GString *message;

pgd = static_cast<PaneGPSData *>(g_object_get_data(G_OBJECT(pane), "pane_data"));
if (!pgd) return;
Expand Down Expand Up @@ -189,7 +188,7 @@ void bar_pane_gps_dnd_receive(GtkWidget *pane, GdkDragContext *,

if(count)
{
message = g_string_new("");
g_autoptr(GString) message = g_string_new("");
if (count == 1)
{
fd_found = static_cast<FileData *>(g_list_first(pgd->geocode_list)->data);
Expand Down Expand Up @@ -230,7 +229,6 @@ void bar_pane_gps_dnd_receive(GtkWidget *pane, GdkDragContext *,
bar_pane_gps_close_save_cb, TRUE);

gtk_widget_show(gd->dialog);
g_string_free(message, TRUE);
}
}
}
Expand Down Expand Up @@ -307,7 +305,6 @@ gboolean bar_pane_gps_marker_keypress_cb(GtkWidget *widget, ClutterButtonEvent *
ClutterActor *actor;
ClutterActor *direction;
ClutterActor *current_image;
GString *text;
gint height;
gint width;
GdkPixbufRotation rotate;
Expand Down Expand Up @@ -380,7 +377,7 @@ gboolean bar_pane_gps_marker_keypress_cb(GtkWidget *widget, ClutterButtonEvent *
thumb_loader_start(tl, fd);
}

text = g_string_new(fd->name);
g_autoptr(GString) text = g_string_new(fd->name);
g_string_append(text, "\n");
g_string_append(text, text_from_time(fd->date));
g_string_append(text, "\n");
Expand All @@ -396,8 +393,6 @@ gboolean bar_pane_gps_marker_keypress_cb(GtkWidget *widget, ClutterButtonEvent *
champlain_marker_set_selection_color(&thumb_colour);
champlain_marker_set_selection_text_color(&text_colour);

g_string_free(text, TRUE);

parent_marker = clutter_actor_get_parent(label_marker);
if (clutter_actor_get_n_children(parent_marker ) > 1 )
{
Expand Down Expand Up @@ -439,18 +434,14 @@ gboolean bar_pane_gps_create_markers_cb(gpointer data)
ClutterActor *direction;
ClutterColor marker_colour = { MARKER_COLOUR };
ClutterColor thumb_colour = { THUMB_COLOUR };
GString *message;
ClutterContent *canvas;

const gint selection_added = pgd->selection_count - g_list_length(pgd->not_added);
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pgd->progress),
static_cast<gdouble>(pgd->selection_count - g_list_length(pgd->not_added)) /
static_cast<gdouble>(pgd->selection_count));
static_cast<gdouble>(selection_added) / static_cast<gdouble>(pgd->selection_count));

message = g_string_new("");
g_string_printf(message, "%u/%i",
pgd->selection_count - g_list_length(pgd->not_added), pgd->selection_count);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pgd->progress), message->str);
g_string_free(message, TRUE);
g_autofree gchar *message = g_strdup_printf("%u/%i", selection_added, pgd->selection_count);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pgd->progress), message);

if(pgd->not_added)
{
Expand Down Expand Up @@ -720,26 +711,21 @@ void bar_pane_gps_slider_changed_cb(GtkScaleButton *slider,
gpointer data)
{
auto pgd = static_cast<PaneGPSData *>(data);
GString *message;

message = g_string_new("");
g_string_printf(message, _("Zoom %i"), static_cast<gint>(zoom));
g_autofree gchar *message = g_strdup_printf(_("Zoom %i"), static_cast<gint>(zoom));

g_object_set(G_OBJECT(CHAMPLAIN_VIEW(pgd->gps_view)), "zoom-level", static_cast<gint>(zoom), NULL);
gtk_widget_set_tooltip_text(GTK_WIDGET(slider), message->str);
g_string_free(message, TRUE);

gtk_widget_set_tooltip_text(GTK_WIDGET(slider), message);
}

void bar_pane_gps_view_state_changed_cb(ChamplainView *view, GParamSpec *, gpointer data)
{
auto pgd = static_cast<PaneGPSData *>(data);
ChamplainState status;
gint zoom;
GString *message;

g_object_get(G_OBJECT(view), "zoom-level", &zoom, NULL);
message = g_string_new("");
g_string_printf(message, _("Zoom level %i"), zoom);
g_autofree gchar *message = g_strdup_printf(_("Zoom level %i"), zoom);

g_object_get(G_OBJECT(view), "state", &status, NULL);
if (status == CHAMPLAIN_STATE_LOADING)
Expand All @@ -748,13 +734,11 @@ void bar_pane_gps_view_state_changed_cb(ChamplainView *view, GParamSpec *, gpoin
}
else
{
gtk_label_set_text(GTK_LABEL(pgd->state), message->str);
gtk_label_set_text(GTK_LABEL(pgd->state), message);
}

gtk_widget_set_tooltip_text(GTK_WIDGET(pgd->slider), message->str);
gtk_widget_set_tooltip_text(GTK_WIDGET(pgd->slider), message);
gtk_scale_button_set_value(GTK_SCALE_BUTTON(pgd->slider), static_cast<gdouble>(zoom));

g_string_free(message, TRUE);
}

void bar_pane_gps_notify_cb(FileData *fd, NotifyType type, gpointer data)
Expand Down Expand Up @@ -815,27 +799,25 @@ GtkWidget *bar_pane_gps_menu(PaneGPSData *pgd)
void bar_pane_gps_map_centreing(PaneGPSData *pgd)
{
GenericDialog *gd;
GString *message = g_string_new("");

const gchar *message;
if (pgd->centre_map_checked)
{
message = g_string_append(message, _("Move map centre to marker\n is disabled"));
pgd->centre_map_checked = FALSE;
message = _("Move map centre to marker\n is disabled");
}
else
{
message = g_string_append(message, _("Move map centre to marker\n is enabled"));
pgd->centre_map_checked = TRUE;
message = _("Move map centre to marker\n is enabled");
}

pgd->centre_map_checked = !pgd->centre_map_checked;

gd = generic_dialog_new(_("Map centering"),
"map_centering", nullptr, TRUE, nullptr, pgd);
generic_dialog_add_message(gd, GQ_ICON_DIALOG_INFO, _("Map Centering"), message->str, TRUE);
generic_dialog_add_message(gd, GQ_ICON_DIALOG_INFO, _("Map Centering"), message, TRUE);
generic_dialog_add_button(gd, GQ_ICON_OK, "OK", nullptr, TRUE);

gtk_widget_show(gd->dialog);

g_string_free(message, TRUE);
}

#if HAVE_GTK4
Expand Down
3 changes: 1 addition & 2 deletions src/collect-dlg.cc
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ static void collection_save_or_append_dialog(gint type, CollectionData *cd)

collect_manager_list(&collection_list, nullptr, nullptr);

GString *out_string = g_string_new(nullptr);
g_autoptr(GString) out_string = g_string_new(nullptr);

for (GList *work = collection_list; work != nullptr; work = work->next)
{
Expand All @@ -163,7 +163,6 @@ static void collection_save_or_append_dialog(gint type, CollectionData *cd)
g_list_free_full(collection_list, g_free);

existing_collections = gtk_label_new(out_string->str);
g_string_free(out_string, TRUE);

scrolled = gq_gtk_scrolled_window_new(nullptr, nullptr);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
Expand Down
4 changes: 1 addition & 3 deletions src/collect-io.cc
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ static gboolean collection_load_private(CollectionData *cd, const gchar *path, C
return FALSE;
}

GString *extended_filename_buffer = g_string_new(nullptr);
g_autoptr(GString) extended_filename_buffer = g_string_new(nullptr);
while (fgets(s_buf, sizeof(s_buf), f))
{
gchar *buf;
Expand Down Expand Up @@ -341,8 +341,6 @@ static gboolean collection_load_private(CollectionData *cd, const gchar *path, C
g_free(buffer2);
}

g_string_free(extended_filename_buffer, TRUE);

DEBUG_1("collection files: total = %u fail = %u official=%d gqview=%d geometry=%d", total, fail, has_official_header, has_gqview_header, has_geometry_header);

fclose(f);
Expand Down
25 changes: 10 additions & 15 deletions src/collect.cc
Original file line number Diff line number Diff line change
Expand Up @@ -373,30 +373,25 @@ gboolean is_collection(const gchar *param)
*
*
*/
void collection_contents(const gchar *name, GString **contents)
GString *collection_contents(const gchar *name, GString *contents)
{
CollectionData *cd;
CollectInfo *ci;
GList *work;
FileData *fd;

if (!is_collection(name)) return;
if (!is_collection(name)) return contents;

CollectionData *cd = collection_new("");
g_autofree gchar *path = collection_path(name);
cd = collection_new("");
collection_load(cd, path, COLLECTION_LOAD_APPEND);
work = cd->list;
while (work)

for (GList *work = cd->list; work; work = work->next)
{
ci = static_cast<CollectInfo *>(work->data);
fd = ci->fd;
*contents = g_string_append(*contents, fd->path);
*contents = g_string_append(*contents, "\n");
auto *ci = static_cast<CollectInfo *>(work->data);

work = work->next;
contents = g_string_append(contents, ci->fd->path);
contents = g_string_append(contents, "\n");
}

collection_free(cd);

return contents;
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/collect.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ gboolean collection_window_modified_exists();

gboolean is_collection(const gchar *param);
gchar *collection_path(const gchar *param);
void collection_contents(const gchar *name, GString **contents);
GString *collection_contents(const gchar *name, GString *contents) G_GNUC_WARN_UNUSED_RESULT;
GList *collection_contents_fd(const gchar *name);

#endif
Expand Down
Loading

0 comments on commit 97d189c

Please sign in to comment.