r20763 - gnucash/trunk/src/import-export/qif-import - Correct memory handling of scm_to_locale_string per guile manual
J. Alex Aycinena
alex.aycinena at code.gnucash.org
Wed Jun 15 20:11:19 EDT 2011
Author: alex.aycinena
Date: 2011-06-15 20:11:18 -0400 (Wed, 15 Jun 2011)
New Revision: 20763
Trac: http://svn.gnucash.org/trac/changeset/20763
Modified:
gnucash/trunk/src/import-export/qif-import/druid-qif-import.c
Log:
Correct memory handling of scm_to_locale_string per guile manual
Modified: gnucash/trunk/src/import-export/qif-import/druid-qif-import.c
===================================================================
--- gnucash/trunk/src/import-export/qif-import/druid-qif-import.c 2011-06-15 20:07:41 UTC (rev 20762)
+++ gnucash/trunk/src/import-export/qif-import/druid-qif-import.c 2011-06-16 00:11:18 UTC (rev 20763)
@@ -216,7 +216,8 @@
SCM get_gnc_name = scm_c_eval_string("qif-map-entry:gnc-name");
SCM get_new = scm_c_eval_string("qif-map-entry:new-acct?");
SCM accts_left;
- const gchar *qif_name, *gnc_name;
+ const gchar *qif_name = NULL;
+ const gchar *gnc_name = NULL;
gboolean checked;
gint row = 0;
gint prev_row;
@@ -242,8 +243,26 @@
while (!scm_is_null(accts_left))
{
- qif_name = scm_to_locale_string(scm_call_1(get_qif_name, SCM_CAR(accts_left)));
- gnc_name = scm_to_locale_string(scm_call_1(get_gnc_name, SCM_CAR(accts_left)));
+ if (scm_is_string(scm_call_1(get_qif_name, SCM_CAR(accts_left))))
+ {
+ char * str;
+
+ scm_dynwind_begin (0);
+ str = scm_to_locale_string (scm_call_1(get_qif_name, SCM_CAR(accts_left)));
+ qif_name = g_strdup (str);
+ scm_dynwind_free (str);
+ scm_dynwind_end ();
+ }
+ if (scm_is_string(scm_call_1(get_gnc_name, SCM_CAR(accts_left))))
+ {
+ char * str;
+
+ scm_dynwind_begin (0);
+ str = scm_to_locale_string (scm_call_1(get_gnc_name, SCM_CAR(accts_left)));
+ gnc_name = g_strdup (str);
+ scm_dynwind_free (str);
+ scm_dynwind_end ();
+ }
checked = (scm_call_1(get_new, SCM_CAR(accts_left)) == SCM_BOOL_T);
gtk_list_store_append(store, &iter);
@@ -883,8 +902,19 @@
}
else if (!scm_is_null(load_return))
{
- const gchar *str = scm_to_locale_string(SCM_CADR(load_return));
+ /* since the result of scm_to_locale_string doesn't appear to be used */
+ /* can we just delete the whole if statement? */
+ if (scm_is_string(SCM_CADR(load_return)))
+ {
+ char * str;
+ scm_dynwind_begin (0);
+ str = scm_to_locale_string (SCM_CADR(load_return));
+ /* str doesn't seem to be used anywhere, so go ahead and free it */
+ scm_dynwind_free (str);
+ scm_dynwind_end ();
+ }
+
if (SCM_CAR(load_return) == SCM_BOOL_F)
{
imported_files = scm_call_2(unload_qif_file, scm_qiffile, imported_files);
@@ -1092,11 +1122,19 @@
else if (scm_call_1(check_from_acct, wind->selected_file) != SCM_BOOL_T)
{
SCM default_acct = scm_c_eval_string("qif-file:path-to-accountname");
- const gchar * default_acctname;
+ const gchar * default_acctname = NULL;
/* Go to the "ask account name" page. */
- default_acctname = scm_to_locale_string(scm_call_1(default_acct,
- wind->selected_file));
+ if (scm_is_string(scm_call_1(default_acct, wind->selected_file)))
+ {
+ char * str;
+
+ scm_dynwind_begin (0);
+ str = scm_to_locale_string (scm_call_1(default_acct, wind->selected_file));
+ default_acctname = g_strdup (str);
+ scm_dynwind_free (str);
+ scm_dynwind_end ();
+ }
gtk_entry_set_text(GTK_ENTRY(wind->acct_entry), default_acctname);
gnome_druid_set_page(GNOME_DRUID(wind->druid),
@@ -1194,10 +1232,19 @@
{
/* There is an account name missing. Ask the user to provide one. */
SCM default_acct = scm_c_eval_string("qif-file:path-to-accountname");
- const gchar * default_acctname;
+ const gchar * default_acctname = NULL;
- default_acctname = scm_to_locale_string(scm_call_1(default_acct,
+ if (scm_is_string(scm_call_1(default_acct, wind->selected_file)))
+ {
+ char * str;
+
+ scm_dynwind_begin (0);
+ str = scm_to_locale_string (scm_call_1(default_acct,
wind->selected_file));
+ default_acctname = g_strdup (str);
+ scm_dynwind_free (str);
+ scm_dynwind_end ();
+ }
gtk_entry_set_text(GTK_ENTRY(wind->acct_entry), default_acctname);
return FALSE;
@@ -1227,7 +1274,7 @@
SCM scm_qiffile = SCM_BOOL_F;
SCM qif_file_path;
int row = 0;
- const char * row_text;
+ const char * row_text = NULL;
GtkTreeView *view;
GtkListStore *store;
GtkTreeIter iter;
@@ -1243,8 +1290,17 @@
while (!scm_is_null(loaded_file_list))
{
scm_qiffile = SCM_CAR(loaded_file_list);
- row_text = scm_to_locale_string(scm_call_1(qif_file_path, scm_qiffile));
+ if (scm_is_string(scm_call_1(qif_file_path, scm_qiffile)))
+ {
+ char * str;
+ scm_dynwind_begin (0);
+ str = scm_to_locale_string (scm_call_1(qif_file_path, scm_qiffile));
+ row_text = g_strdup (str);
+ scm_dynwind_free (str);
+ scm_dynwind_end ();
+ }
+
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
FILENAME_COL_INDEX, row++,
More information about the gnucash-changes
mailing list