SF.net SVN: geany:[3245] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Tue Nov 18 17:14:00 UTC 2008


Revision: 3245
          http://geany.svn.sourceforge.net/geany/?rev=3245&view=rev
Author:   ntrel
Date:     2008-11-18 17:14:00 +0000 (Tue, 18 Nov 2008)

Log Message:
-----------
Make utils_free_pointers() take an arg_count argument to prevent
memory leaks.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/build.c
    trunk/src/editor.c
    trunk/src/project.c
    trunk/src/search.c
    trunk/src/templates.c
    trunk/src/utils.c
    trunk/src/utils.h

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-11-18 17:03:15 UTC (rev 3244)
+++ trunk/ChangeLog	2008-11-18 17:14:00 UTC (rev 3245)
@@ -13,6 +13,10 @@
    src/symbols.h:
    Move symbol list popup menu code to symbols.c.
    Add symbols_init().
+ * src/templates.c, src/build.c, src/utils.c, src/utils.h,
+   src/project.c, src/search.c, src/editor.c:
+   Make utils_free_pointers() take an arg_count argument to prevent
+   memory leaks.
 
 
 2008-11-16  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>

Modified: trunk/src/build.c
===================================================================
--- trunk/src/build.c	2008-11-18 17:03:15 UTC (rev 3244)
+++ trunk/src/build.c	2008-11-18 17:14:00 UTC (rev 3245)
@@ -178,7 +178,7 @@
 	if (g_stat(locale_filename, &st) != 0)
 	{
 		ui_set_statusbar(TRUE, _("Failed to view %s (make sure it is already compiled)"), view_file);
-		utils_free_pointers(executable, view_file, locale_filename, NULL);
+		utils_free_pointers(3, executable, view_file, locale_filename, NULL);
 
 		return (GPid) 1;
 	}
@@ -213,7 +213,7 @@
 			_("Could not find terminal \"%s\" "
 				"(check path for Terminal tool setting in Preferences)"), tool_prefs.term_cmd);
 
-		utils_free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
+		utils_free_pointers(6, executable, view_file, locale_filename, cmd_string, locale_cmd_string,
 										locale_term_cmd, NULL);
 		g_strfreev(term_argv);
 		return (GPid) 1;
@@ -227,7 +227,7 @@
 	{
 		ui_set_statusbar(TRUE, _("Failed to execute \"%s\" (start-script could not be created)"),
 													executable);
-		utils_free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
+		utils_free_pointers(7, executable, view_file, locale_filename, cmd_string, locale_cmd_string,
 										locale_term_cmd, working_dir, NULL);
 		g_strfreev(term_argv);
 		return (GPid) 1;
@@ -264,7 +264,7 @@
 		geany_debug("g_spawn_async() failed: %s", error->message);
 		ui_set_statusbar(TRUE, _("Process failed (%s)"), error->message);
 
-		utils_free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
+		utils_free_pointers(6, executable, view_file, locale_filename, cmd_string, locale_cmd_string,
 										locale_term_cmd, NULL);
 		g_strfreev(argv);
 		g_strfreev(term_argv);
@@ -280,7 +280,7 @@
 		build_menu_update(doc);
 	}
 
-	utils_free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
+	utils_free_pointers(6, executable, view_file, locale_filename, cmd_string, locale_cmd_string,
 										locale_term_cmd, NULL);
 	g_strfreev(argv);
 	g_strfreev(term_argv);
@@ -641,7 +641,7 @@
 		gchar *utf8_working_dir = utils_get_utf8_from_locale(working_dir);
 
 		ui_set_statusbar(TRUE, _("Failed to change the working directory to \"%s\""), utf8_working_dir);
-		utils_free_pointers(utf8_working_dir, working_dir, executable, locale_filename, NULL);
+		utils_free_pointers(4, utf8_working_dir, working_dir, executable, locale_filename, NULL);
 		return NULL;
 	}
 
@@ -660,7 +660,7 @@
 			if (vte_cmd_nonscript != NULL)
 				*vte_cmd_nonscript = cmd;
 
-			utils_free_pointers(executable, locale_filename, NULL);
+			utils_free_pointers(2, executable, locale_filename, NULL);
 			return working_dir;
 		}
 		else
@@ -682,7 +682,7 @@
 		g_free(utf8_cmd);
 	}
 
-	utils_free_pointers(tmp, cmd, executable, locale_filename, NULL);
+	utils_free_pointers(4, tmp, cmd, executable, locale_filename, NULL);
 
 	if (result)
 		return working_dir;

Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c	2008-11-18 17:03:15 UTC (rev 3244)
+++ trunk/src/editor.c	2008-11-18 17:14:00 UTC (rev 3245)
@@ -1686,7 +1686,7 @@
 	text = templates_replace_all(text, year, date, datetime);
 	text = utils_str_replace(text, "{filename}", basename);
 
-	utils_free_pointers(year, date, datetime, basename, NULL);
+	utils_free_pointers(4, year, date, datetime, basename, NULL);
 
 	return text;
 }
@@ -1799,7 +1799,7 @@
 	pattern = snippets_find_completion_by_name(filetypes[ft_id]->name, str);
 	if (pattern == NULL || pattern[0] == '\0')
 	{
-		utils_free_pointers(str, pattern, NULL); /* free pattern in case it is "" */
+		utils_free_pointers(2, str, pattern, NULL); /* free pattern in case it is "" */
 		return FALSE;
 	}
 
@@ -1839,7 +1839,7 @@
 	editor_insert_text_block(editor, pattern, pos, cur_index, -1);
 	sci_scroll_caret(sci);
 
-	utils_free_pointers(pattern, str, NULL);
+	utils_free_pointers(2, pattern, str, NULL);
  	return TRUE;
 }
 

Modified: trunk/src/project.c
===================================================================
--- trunk/src/project.c	2008-11-18 17:03:15 UTC (rev 3244)
+++ trunk/src/project.c	2008-11-18 17:14:00 UTC (rev 3245)
@@ -627,7 +627,7 @@
 					SHOW_ERR1(_("Project base directory could not be created (%s)."),
 						g_strerror(err_code));
 				gtk_widget_grab_focus(e->base_path);
-				utils_free_pointers(locale_path, locale_filename, NULL);
+				utils_free_pointers(2, locale_path, locale_filename, NULL);
 				return FALSE;
 			}
 		}

Modified: trunk/src/search.c
===================================================================
--- trunk/src/search.c	2008-11-18 17:03:15 UTC (rev 3244)
+++ trunk/src/search.c	2008-11-18 17:14:00 UTC (rev 3245)
@@ -1321,7 +1321,7 @@
 			tool_prefs.grep_cmd, opts, utf8_search_text, dir);
 		utf8_str = utils_get_utf8_from_locale(str);
 		msgwin_msg_add(COLOR_BLUE, -1, NULL, utf8_str);
-		utils_free_pointers(str, utf8_str, NULL);
+		utils_free_pointers(2, str, utf8_str, NULL);
 		ret = TRUE;
 	}
 	g_strfreev(argv);

Modified: trunk/src/templates.c
===================================================================
--- trunk/src/templates.c	2008-11-18 17:03:15 UTC (rev 3244)
+++ trunk/src/templates.c	2008-11-18 17:14:00 UTC (rev 3245)
@@ -390,7 +390,7 @@
 		utils_string_replace_all(&template, "{filename}", doc_filename);
 		utils_string_replace_all(&template, "{fileheader}", file_header);
 
-		utils_free_pointers(year, date, datetime, file_header, NULL);
+		utils_free_pointers(4, year, date, datetime, file_header, NULL);
 	}
 	return template.str;
 }

Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c	2008-11-18 17:03:15 UTC (rev 3244)
+++ trunk/src/utils.c	2008-11-18 17:14:00 UTC (rev 3245)
@@ -505,10 +505,10 @@
 gchar *utils_str_replace(gchar *haystack, const gchar *needle, const gchar *replacement)
 {
 	GString *str;
-	
+
 	if (haystack == NULL)
 		return NULL;
-		
+
 	str = g_string_new(haystack);
 
 	g_free(haystack);
@@ -1101,24 +1101,24 @@
 }
 
 
-/* Frees all passed pointers if they are *ALL* non-NULL.
- * Do not use if any pointers may be NULL.
- * The first argument is nothing special, it will also be freed.
- * The list must be ended with NULL. */
-void utils_free_pointers(gpointer first, ...)
+/* Pass pointers to free after arg_count.
+ * The last argument must be NULL as an extra check that arg_count is correct. */
+void utils_free_pointers(gsize arg_count, ...)
 {
 	va_list a;
-	gpointer sa;
+	gsize i;
+	gpointer ptr;
 
-    for (va_start(a, first);  (sa = va_arg(a, gpointer), sa!=NULL);)
-    {
-    	if (sa != NULL)
-    		g_free(sa);
+	va_start(a, arg_count);
+	for (i = 0; i < arg_count; i++)
+	{
+		ptr = va_arg(a, gpointer);
+		g_free(ptr);
 	}
+	ptr = va_arg(a, gpointer);
+	if (ptr)
+		g_warning("Wrong arg_count!");
 	va_end(a);
-
-    if (first != NULL)
-    	g_free(first);
 }
 
 

Modified: trunk/src/utils.h
===================================================================
--- trunk/src/utils.h	2008-11-18 17:03:15 UTC (rev 3244)
+++ trunk/src/utils.h	2008-11-18 17:14:00 UTC (rev 3245)
@@ -118,7 +118,7 @@
 
 gchar *utils_get_utf8_from_locale(const gchar *locale_text);
 
-void utils_free_pointers(gpointer first, ...) G_GNUC_NULL_TERMINATED;
+void utils_free_pointers(gsize arg_count, ...) G_GNUC_NULL_TERMINATED;
 
 gchar **utils_strv_new(const gchar *first, ...) G_GNUC_NULL_TERMINATED;
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list