From 082d4176d58a5cdb0468eeef9ca0227c9fcb5547 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 31 Mar 2006 05:17:56 +0000 Subject: [PATCH] Don't leak the keyfile parser in the error case. 2006-03-31 Matthias Clasen * gtk/gtkicontheme.c (load_icon_data): Don't leak the keyfile parser in the error case. * gtk/gtkicontheme.c (load_icon_data, free_unthemed_icon) (icon_data_free, load_themes): * gtk/gtkiconcache.c (_gtk_icon_cache_get_icon_data): Use the slice allocator for GtkIconData and UnthemedIcon structs. --- ChangeLog | 10 ++++++++++ ChangeLog.pre-2-10 | 10 ++++++++++ gtk/gtkiconcache.c | 2 +- gtk/gtkicontheme.c | 41 +++++++++++++++++++++-------------------- 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index f3fbd8652..ba597e3ac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2006-03-31 Matthias Clasen + + * gtk/gtkicontheme.c (load_icon_data): Don't leak the keyfile + parser in the error case. + + * gtk/gtkicontheme.c (load_icon_data, free_unthemed_icon) + (icon_data_free, load_themes): + * gtk/gtkiconcache.c (_gtk_icon_cache_get_icon_data): Use the slice + allocator for GtkIconData and UnthemedIcon structs. + 2006-03-30 Behdad Esfahbod * gtk/gtkcalendar.c: Fix translation comments for localizable diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index f3fbd8652..ba597e3ac 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,13 @@ +2006-03-31 Matthias Clasen + + * gtk/gtkicontheme.c (load_icon_data): Don't leak the keyfile + parser in the error case. + + * gtk/gtkicontheme.c (load_icon_data, free_unthemed_icon) + (icon_data_free, load_themes): + * gtk/gtkiconcache.c (_gtk_icon_cache_get_icon_data): Use the slice + allocator for GtkIconData and UnthemedIcon structs. + 2006-03-30 Behdad Esfahbod * gtk/gtkcalendar.c: Fix translation comments for localizable diff --git a/gtk/gtkiconcache.c b/gtk/gtkiconcache.c index 23fe31d6d..55559aac1 100644 --- a/gtk/gtkiconcache.c +++ b/gtk/gtkiconcache.c @@ -489,7 +489,7 @@ _gtk_icon_cache_get_icon_data (GtkIconCache *cache, if (!meta_data_offset) return NULL; - data = g_new0 (GtkIconData, 1); + data = g_slice_new0 (GtkIconData); offset = GET_UINT32 (cache->buffer, meta_data_offset); if (offset) diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index 5dfd6df2f..1be4d3660 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -67,16 +67,17 @@ typedef enum struct _GtkIconThemePrivate { - guint custom_theme : 1; + guint custom_theme : 1; guint is_screen_singleton : 1; guint pixbuf_supports_svg : 1; + guint themes_valid : 1; + guint check_reload : 1; char *current_theme; char *fallback_theme; char **search_path; int search_path_len; - gboolean themes_valid; /* A list of all the themes needed to look up icons. * In search order, without duplicates */ @@ -97,8 +98,6 @@ struct _GtkIconThemePrivate GList *dir_mtimes; gulong reset_styles_idle; - - gboolean check_reload; }; struct _GtkIconInfo @@ -1019,7 +1018,7 @@ free_unthemed_icon (UnthemedIcon *unthemed_icon) g_free (unthemed_icon->svg_filename); if (unthemed_icon->no_svg_filename) g_free (unthemed_icon->no_svg_filename); - g_free (unthemed_icon); + g_slice_free (UnthemedIcon, unthemed_icon); } static void @@ -1064,9 +1063,9 @@ load_themes (GtkIconTheme *icon_theme) dir_mtime->mtime = stat_buf.st_mtime; else dir_mtime->mtime = 0; - + priv->dir_mtimes = g_list_append (priv->dir_mtimes, dir_mtime); - + if (dir_mtime->cache != NULL) continue; @@ -1074,21 +1073,21 @@ load_themes (GtkIconTheme *icon_theme) if (gdir == NULL) continue; - + while ((file = g_dir_read_name (gdir))) { new_suffix = suffix_from_name (file); - + if (new_suffix != ICON_SUFFIX_NONE) { abs_file = g_build_filename (dir, file, NULL); - + base_name = g_strdup (file); - + dot = strrchr (base_name, '.'); if (dot) *dot = 0; - + if ((unthemed_icon = g_hash_table_lookup (priv->unthemed_icons, base_name))) { @@ -1120,7 +1119,7 @@ load_themes (GtkIconTheme *icon_theme) } else { - unthemed_icon = g_new0 (UnthemedIcon, 1); + unthemed_icon = g_slice_new0 (UnthemedIcon); if (new_suffix == ICON_SUFFIX_SVG) unthemed_icon->svg_filename = abs_file; @@ -2093,6 +2092,7 @@ load_icon_data (IconThemeDir *dir, const char *path, const char *name) if (error) { g_error_free (error); + g_key_file_free (icon_file); return; } else @@ -2101,7 +2101,7 @@ load_icon_data (IconThemeDir *dir, const char *path, const char *name) dot = strrchr (base_name, '.'); *dot = 0; - data = g_new0 (GtkIconData, 1); + data = g_slice_new0 (GtkIconData); g_hash_table_replace (dir->icon_data, base_name, data); ivalues = g_key_file_get_integer_list (icon_file, @@ -2127,7 +2127,7 @@ load_icon_data (IconThemeDir *dir, const char *path, const char *name) split = g_strsplit (str, "|", -1); data->n_attach_points = g_strv_length (split); - data->attach_points = g_malloc (sizeof (GdkPoint) * data->n_attach_points); + data->attach_points = g_new (GdkPoint, data->n_attach_points); i = 0; while (split[i] != NULL && i < data->n_attach_points) @@ -2333,7 +2333,7 @@ icon_data_free (GtkIconData *icon_data) { g_free (icon_data->attach_points); g_free (icon_data->display_name); - g_free (icon_data); + g_slice_free (GtkIconData, icon_data); } /* @@ -2349,13 +2349,14 @@ gtk_icon_info_get_type (void) (GBoxedCopyFunc) gtk_icon_info_copy, (GBoxedFreeFunc) gtk_icon_info_free); + return our_type; } static GtkIconInfo * icon_info_new (void) { - GtkIconInfo *icon_info = g_new0 (GtkIconInfo, 1); + GtkIconInfo *icon_info = g_slice_new0 (GtkIconInfo); icon_info->scale = -1.; @@ -2392,7 +2393,7 @@ gtk_icon_info_copy (GtkIconInfo *icon_info) g_return_val_if_fail (icon_info != NULL, NULL); - copy = g_memdup (icon_info, sizeof (GtkIconInfo)); + copy = memcpy (g_slice_new (GtkIconInfo), icon_info, sizeof (GtkIconInfo)); if (copy->cache_pixbuf) g_object_ref (copy->cache_pixbuf); if (copy->pixbuf) @@ -2433,7 +2434,7 @@ gtk_icon_info_free (GtkIconInfo *icon_info) if (icon_info->cache_pixbuf) g_object_unref (icon_info->cache_pixbuf); - g_free (icon_info); + g_slice_free (GtkIconInfo, icon_info); } /** @@ -2891,7 +2892,7 @@ gtk_icon_info_get_attach_points (GtkIconInfo *icon_info, * Since: 2.4 **/ G_CONST_RETURN gchar * -gtk_icon_info_get_display_name (GtkIconInfo *icon_info) +gtk_icon_info_get_display_name (GtkIconInfo *icon_info) { g_return_val_if_fail (icon_info != NULL, NULL); -- 2.43.2