SF.net SVN: geany:[4026] branches/build-system

elextr at users.sourceforge.net elextr at xxxxx
Sat Jul 25 05:24:52 UTC 2009


Revision: 4026
          http://geany.svn.sourceforge.net/geany/?rev=4026&view=rev
Author:   elextr
Date:     2009-07-25 05:24:48 +0000 (Sat, 25 Jul 2009)

Log Message:
-----------
Fixed crashes and warnings in project open and close

Modified Paths:
--------------
    branches/build-system/ChangeLog
    branches/build-system/src/build.c
    branches/build-system/src/project.c

Modified: branches/build-system/ChangeLog
===================================================================
--- branches/build-system/ChangeLog	2009-07-24 15:44:14 UTC (rev 4025)
+++ branches/build-system/ChangeLog	2009-07-25 05:24:48 UTC (rev 4026)
@@ -1,3 +1,12 @@
+2009-07-25  Lex Trotman  <elextr(at)gmail(dot)com>
+
+ * src/build.c
+   Fixed leaks and crashes due to inconsistent use of static vs dynamic strings
+   when reading old format configuration & project files.
+ * src/build.c, src/project.c
+   Fixed GLib array assertion warnings when no project filetypes are
+   available to be saved.
+
 2009-07-24  Lex Trotman  <elextr(at)gmail(dot)com>
 
  * src/build.c

Modified: branches/build-system/src/build.c
===================================================================
--- branches/build-system/src/build.c	2009-07-24 15:44:14 UTC (rev 4025)
+++ branches/build-system/src/build.c	2009-07-25 05:24:48 UTC (rev 4026)
@@ -2160,11 +2160,12 @@
 #define ASSIGNIF(type, id, string, value) \
 	if (value!=NULL && !type[GBO_TO_CMD(id)].exists && strlen(value)>0) { \
 		type[GBO_TO_CMD(id)].exists = TRUE; \
-		type[GBO_TO_CMD(id)].entries[BC_LABEL] = g_strdup(_(string)); \
-		type[GBO_TO_CMD(id)].entries[BC_COMMAND] = (value); \
-		type[GBO_TO_CMD(id)].entries[BC_WORKING_DIR] = NULL; \
+		setptr(type[GBO_TO_CMD(id)].entries[BC_LABEL], g_strdup(_(string))); \
+		setptr(type[GBO_TO_CMD(id)].entries[BC_COMMAND], (value)); \
+		setptr(type[GBO_TO_CMD(id)].entries[BC_WORKING_DIR], NULL); \
 		type[GBO_TO_CMD(id)].old = TRUE; \
-	}
+	} else \
+		g_free(value);
 		
 	switch(src)
 	{
@@ -2186,11 +2187,11 @@
 			bvalue = g_key_file_get_boolean(config, "project", "make_in_base_path", NULL);
 			value = bvalue?"%p":"%d";
 			if (non_ft_pref[GBO_TO_CMD(GBO_MAKE_ALL)].old)
-				setptr(non_ft_pref[GBO_TO_CMD(GBO_MAKE_ALL)].entries[BC_WORKING_DIR], value );
+				setptr(non_ft_pref[GBO_TO_CMD(GBO_MAKE_ALL)].entries[BC_WORKING_DIR], g_strdup(value) );
 			if (non_ft_pref[GBO_TO_CMD(GBO_MAKE_CUSTOM)].old)
-				setptr(non_ft_pref[GBO_TO_CMD(GBO_MAKE_CUSTOM)].entries[BC_WORKING_DIR], value );
+				setptr(non_ft_pref[GBO_TO_CMD(GBO_MAKE_CUSTOM)].entries[BC_WORKING_DIR], g_strdup(value) );
 			if (non_ft_pref[GBO_TO_CMD(GBO_MAKE_OBJECT)].old)
-				setptr(non_ft_pref[GBO_TO_CMD(GBO_MAKE_OBJECT)].entries[BC_WORKING_DIR], value );
+				setptr(non_ft_pref[GBO_TO_CMD(GBO_MAKE_OBJECT)].entries[BC_WORKING_DIR], g_strdup(value) );
 			value = g_key_file_get_string(config, "project", "run_cmd", NULL);
 			if (value !=NULL)
 			{
@@ -2201,11 +2202,11 @@
 		case BCS_PREF:
 			if (non_ft_pref==NULL)non_ft_pref = g_new0(GeanyBuildCommand, build_groups_count[GBG_NON_FT]);
 			value = g_key_file_get_string(config, "tools", "make_cmd", NULL);
-			ASSIGNIF(non_ft_pref, GBO_MAKE_ALL, g_strdup(_("_Make")), value);
-			ASSIGNIF(non_ft_pref, GBO_MAKE_CUSTOM, g_strdup(_("Make Custom _Target")),
-					g_strdup_printf("%s ",value));
-			ASSIGNIF(non_ft_pref, GBO_MAKE_OBJECT, g_strdup(_("Make _Object")),
+			ASSIGNIF(non_ft_pref, GBO_MAKE_CUSTOM, "Make Custom _Target",
+					g_strdup_printf("%s ", value));
+			ASSIGNIF(non_ft_pref, GBO_MAKE_OBJECT, "Make _Object",
 					g_strdup_printf("%s %%e.o",value));
+			ASSIGNIF(non_ft_pref, GBO_MAKE_ALL, "_Make", value);
 			break;
 		default:
 			break;
@@ -2316,15 +2317,18 @@
 				g_key_file_set_string(config, build_grp_name, "error_regex", regex_proj);
 			else
 				g_key_file_remove_key(config, build_grp_name, "error_regex", NULL);
-			data.config = config;
-			data.ft_names = g_ptr_array_new();
-			g_ptr_array_foreach(pj->build_filetypes_list, foreach_project_filetype, (gpointer)(&data));
-			if (data.ft_names->pdata!=NULL)
-				g_key_file_set_string_list(config, build_grp_name, "filetypes",
-							(const gchar**)(data.ft_names->pdata), data.ft_names->len);
-			else
-				g_key_file_remove_key(config, build_grp_name, "filetypes", NULL);
-			g_ptr_array_free(data.ft_names, TRUE);
+			if (pj->build_filetypes_list!=NULL)
+			{
+				data.config = config;
+				data.ft_names = g_ptr_array_new();
+				g_ptr_array_foreach(pj->build_filetypes_list, foreach_project_filetype, (gpointer)(&data));
+				if (data.ft_names->pdata!=NULL)
+					g_key_file_set_string_list(config, build_grp_name, "filetypes",
+								(const gchar**)(data.ft_names->pdata), data.ft_names->len);
+				else
+					g_key_file_remove_key(config, build_grp_name, "filetypes", NULL);
+				g_ptr_array_free(data.ft_names, TRUE);
+			}
 			break;
 		default: /* defaults and BCS_FT can't save */
 			break;

Modified: branches/build-system/src/project.c
===================================================================
--- branches/build-system/src/project.c	2009-07-24 15:44:14 UTC (rev 4025)
+++ branches/build-system/src/project.c	2009-07-25 05:24:48 UTC (rev 4026)
@@ -348,8 +348,11 @@
 	write_config(FALSE);
 
 	/* remove project filetypes build entries */
-	g_ptr_array_foreach( app->project->build_filetypes_list, remove_foreach_project_filetype, NULL );
-	g_ptr_array_free(app->project->build_filetypes_list, FALSE);
+	if (app->project->build_filetypes_list!=NULL)
+	{
+		g_ptr_array_foreach( app->project->build_filetypes_list, remove_foreach_project_filetype, NULL );
+		g_ptr_array_free(app->project->build_filetypes_list, FALSE);
+	}
 	
 	/* remove project non filetype build menu items */
 	build_remove_menu_item( BCS_PROJ, GBG_NON_FT, -1 );


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