diff src/gtkaccount.c @ 10519:bec9130b24d2

[gaim-migrate @ 11833] Leak fixes, round #2. And some minor MSN tweaks suggested by Felipe. committer: Tailor Script <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Mon, 17 Jan 2005 00:33:30 +0000
parents dc4475bf718f
children f5c9438982f8
line wrap: on
line diff
--- a/src/gtkaccount.c	Sat Jan 15 16:53:55 2005 +0000
+++ b/src/gtkaccount.c	Mon Jan 17 00:33:30 2005 +0000
@@ -244,7 +244,7 @@
 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 @@
 static void
 icon_filesel_choose_cb(GtkWidget *w, AccountPrefsDialog *dialog)
 {
-	const char *filename;
-
-	filename = gtk_file_selection_get_filename(
-			GTK_FILE_SELECTION(dialog->icon_filesel));
+	char *filename;
+
+	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 @@
 
 	gtk_widget_destroy(dialog->icon_filesel);
 	dialog->icon_filesel = NULL;
+	g_free(filename);
  }
 
 static void
@@ -292,18 +294,21 @@
 	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 @@
 		gtk_file_chooser_set_preview_widget_active(
 					GTK_FILE_CHOOSER(dialog->icon_filesel), FALSE);
 #endif /* FILECHOOSER */
+		g_free(filename);
 		return;
 	}
 
@@ -336,6 +342,7 @@
 
 	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 @@
 		   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 @@
 		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 @@
 			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 @@
 				gaim_debug_error("buddyicon",
 								 "Unable to create directory %s: %s\n",
 								 dirname, strerror(errno));
+				g_strfreev(prpl_formats);
 				return NULL;
 			}
 		}
@@ -595,6 +607,7 @@
 			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 @@
 	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);