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