Update of /cvsroot/gaim/gaim/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7284/src
Modified Files:
gtkaccount.c status.c
Log Message:
Leak fixes, round #2. And some minor MSN tweaks suggested by Felipe.
Index: gtkaccount.c
===================================================================
RCS file: /cvsroot/gaim/gaim/src/gtkaccount.c,v
retrieving revision 1.162
retrieving revision 1.163
diff -u -d -p -r1.162 -r1.163
--- gtkaccount.c 27 Dec 2004 08:56:04 -0000 1.162
+++ gtkaccount.c 17 Jan 2005 00:33:28 -0000 1.163
@@ -244,7 +244,7 @@ screenname_changed_cb(GtkEntry *entry, A
static void
icon_filesel_choose_cb(GtkWidget *widget, gint response, AccountPrefsDialog *dialog)
{
- const char *filename;
+ char *filename;
if (response != GTK_RESPONSE_ACCEPT) {
if (response == GTK_RESPONSE_CANCEL)
@@ -258,15 +258,16 @@ icon_filesel_choose_cb(GtkWidget *widget
static void
icon_filesel_choose_cb(GtkWidget *w, AccountPrefsDialog *dialog)
{
- const char *filename;
+ char *filename;
- filename = gtk_file_selection_get_filename(
- GTK_FILE_SELECTION(dialog->icon_filesel));
+ filename = g_strdup(gtk_file_selection_get_filename(
+ GTK_FILE_SELECTION(dialog->icon_filesel)));
/* If they typed in a directory, change there */
if (gaim_gtk_check_if_dir(filename,
GTK_FILE_SELECTION(dialog->icon_filesel)))
{
+ g_free(filename);
return;
}
#endif /* FILECHOOSER */
@@ -279,6 +280,7 @@ icon_filesel_choose_cb(GtkWidget *w, Acc
gtk_widget_destroy(dialog->icon_filesel);
dialog->icon_filesel = NULL;
+ g_free(filename);
}
static void
@@ -292,18 +294,21 @@ icon_preview_change_cb(GtkTreeSelection
int height, width;
char *basename, *markup, *size;
struct stat st;
- const char *filename;
+ char *filename;
#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
filename = gtk_file_chooser_get_preview_filename(
GTK_FILE_CHOOSER(dialog->icon_filesel));
#else /* FILECHOOSER */
- filename = gtk_file_selection_get_filename(
- GTK_FILE_SELECTION(dialog->icon_filesel));
+ filename = g_strdup(gtk_file_selection_get_filename(
+ GTK_FILE_SELECTION(dialog->icon_filesel)));
#endif /* FILECHOOSER */
if (!filename || stat(filename, &st))
+ {
+ g_free(filename);
return;
+ }
pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
if (!pixbuf) {
@@ -313,6 +318,7 @@ icon_preview_change_cb(GtkTreeSelection
gtk_file_chooser_set_preview_widget_active(
GTK_FILE_CHOOSER(dialog->icon_filesel), FALSE);
#endif /* FILECHOOSER */
+ g_free(filename);
return;
}
@@ -336,6 +342,7 @@ icon_preview_change_cb(GtkTreeSelection
g_object_unref(G_OBJECT(pixbuf));
g_object_unref(G_OBJECT(scale));
+ g_free(filename);
g_free(basename);
g_free(size);
g_free(markup);
@@ -535,6 +542,8 @@ convert_buddy_icon(GaimPlugin *plugin, c
prpl_info->icon_spec.max_width >= width &&
prpl_info->icon_spec.min_height <= height &&
prpl_info->icon_spec.max_height >= height))) { /* The icon is the correct size */
+ g_strfreev(prpl_formats);
+ g_strfreev(pixbuf_formats);
#endif
return g_strdup(path);
#if GTK_CHECK_VERSION(2,2,0)
@@ -546,6 +555,7 @@ convert_buddy_icon(GaimPlugin *plugin, c
const char *dirname = gaim_buddy_icons_get_cache_dir();
char *filename = g_build_filename(dirname, random, NULL);
pixbuf = gdk_pixbuf_new_from_file(path, &error);
+ g_strfreev(pixbuf_formats);
if (!error && (prpl_info->icon_spec.scale_rules & GAIM_ICON_SCALE_SEND) &&
(width < prpl_info->icon_spec.min_width ||
width > prpl_info->icon_spec.max_width ||
@@ -574,6 +584,7 @@ convert_buddy_icon(GaimPlugin *plugin, c
g_free(random);
gaim_debug_error("buddyicon", "Could not open icon for conversion: %s\n", error->message);
g_error_free(error);
+ g_strfreev(prpl_formats);
return NULL;
}
@@ -584,6 +595,7 @@ convert_buddy_icon(GaimPlugin *plugin, c
gaim_debug_error("buddyicon",
"Unable to create directory %s: %s\n",
dirname, strerror(errno));
+ g_strfreev(prpl_formats);
return NULL;
}
}
@@ -595,6 +607,7 @@ convert_buddy_icon(GaimPlugin *plugin, c
if (gdk_pixbuf_save (pixbuf, filename, prpl_formats[i], &error, NULL) == TRUE)
break;
}
+ g_strfreev(prpl_formats);
if (!error) {
g_free(random);
g_object_unref(G_OBJECT(pixbuf));
@@ -1285,6 +1298,9 @@ account_win_destroy_cb(GtkWidget *w, Gdk
if (dialog->protocol_id != NULL)
g_free(dialog->protocol_id);
+ if (dialog->icon_path != NULL)
+ g_free(dialog->icon_path);
+
if (dialog->icon_filesel)
gtk_widget_destroy(dialog->icon_filesel);
Index: status.c
===================================================================
RCS file: /cvsroot/gaim/gaim/src/status.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -d -p -r1.48 -r1.49
--- status.c 12 Jan 2005 05:22:46 -0000 1.48
+++ status.c 17 Jan 2005 00:33:28 -0000 1.49
@@ -1663,7 +1663,7 @@ score_pref_changed_cb(const char *name,
primitive_scores[index] = GPOINTER_TO_INT(value);
}
-guint
+static guint
gaim_buddy_presences_hash(gconstpointer key)
{
const GaimStatusBuddyKey *me = key;
@@ -1677,7 +1677,7 @@ gaim_buddy_presences_hash(gconstpointer
return ret;
}
-gboolean
+static gboolean
gaim_buddy_presences_equal(gconstpointer a, gconstpointer b)
{
GaimStatusBuddyKey *key_a = (GaimStatusBuddyKey *)a;
@@ -1690,6 +1690,14 @@ gaim_buddy_presences_equal(gconstpointer
return FALSE;
}
+static void
+gaim_buddy_presences_key_free(gpointer a)
+{
+ GaimStatusBuddyKey *key = (GaimStatusBuddyKey *)a;
+ g_free(key->name);
+ g_free(key);
+}
+
void *
gaim_status_get_handle(void) {
static int handle;
@@ -1737,8 +1745,9 @@ gaim_status_init(void)
score_pref_changed_cb,
GINT_TO_POINTER(SCORE_IDLE));
- buddy_presences = g_hash_table_new(gaim_buddy_presences_hash,
- gaim_buddy_presences_equal);
+ buddy_presences = g_hash_table_new_full(gaim_buddy_presences_hash,
+ gaim_buddy_presences_equal,
+ gaim_buddy_presences_key_free, NULL);
}
void
|