summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid King <amigadave@amigadave.com>2013-11-15 15:32:44 +0000
committerDavid King <amigadave@amigadave.com>2013-11-15 15:32:44 +0000
commitd182e4c687b6d7eeb33f3219fc640130335e17b6 (patch)
tree82ea51a6a7da7e089a6e9ec7211f9ddf06d45c93 /src
parenta6eeda8d44d9b58d1828d172bad77edcf46d98f0 (diff)
downloadcheese-d182e4c687b6d7eeb33f3219fc640130335e17b6.tar.gz
Fix memory leak in cheese_thumb_view_remove_item()
Diffstat (limited to 'src')
-rw-r--r--src/thumbview/cheese-thumb-view.c71
1 files changed, 42 insertions, 29 deletions
diff --git a/src/thumbview/cheese-thumb-view.c b/src/thumbview/cheese-thumb-view.c
index d53d73a5..22bfccce 100644
--- a/src/thumbview/cheese-thumb-view.c
+++ b/src/thumbview/cheese-thumb-view.c
@@ -323,41 +323,54 @@ cheese_thumb_view_append_item (CheeseThumbView *thumb_view, GFile *file)
void
cheese_thumb_view_remove_item (CheeseThumbView *thumb_view, GFile *file)
{
- CheeseThumbViewPrivate *priv = CHEESE_THUMB_VIEW_GET_PRIVATE (thumb_view);
+ CheeseThumbViewPrivate *priv = CHEESE_THUMB_VIEW_GET_PRIVATE (thumb_view);
- char *path;
- GtkTreeIter iter;
- char *filename;
- gboolean found = FALSE;
+ gchar *filename;
+ GtkTreeIter iter;
+ gboolean found = FALSE;
- filename = g_file_get_path (file);
+ filename = g_file_get_path (file);
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->store), &iter))
- {
- /* a single item was on the thumbview but it's been already removed */
- return;
- }
+ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->store), &iter))
+ {
+ gchar *col_filename;
- /* check if the selected item is the first, else go through the store */
- gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter, THUMBNAIL_URL_COLUMN, &path, -1);
- if (g_ascii_strcasecmp (path, filename))
- {
- while (gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store), &iter))
+ gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter,
+ THUMBNAIL_URL_COLUMN, &col_filename, -1);
+
+ /* FIXME: col_filename is in GLib filename encoding, not ASCII. */
+ if (g_ascii_strcasecmp (col_filename, filename))
+ {
+ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store),
+ &iter))
+ {
+ g_free (col_filename);
+
+ gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter,
+ THUMBNAIL_URL_COLUMN, &col_filename, -1);
+
+ /* FIXME: col_filename is in GLib filename encoding, not ASCII. */
+ if (!g_ascii_strcasecmp (col_filename, filename))
+ {
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ else
+ {
+ found = TRUE;
+ }
+
+ g_free (col_filename);
+ g_free (filename);
+ }
+ else
{
- gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter, THUMBNAIL_URL_COLUMN, &path, -1);
- if (!g_ascii_strcasecmp (path, filename))
- {
- found = TRUE;
- break;
- }
+ /* A single item was in the thumbview but it's been already removed. */
+ g_free (filename);
+ return;
}
- }
- else
- {
- found = TRUE;
- }
- g_free (path);
- g_free (filename);
if (!found) return;