From 75c97e4705bec2d8e59943b9b81f20c7324a1e6f Mon Sep 17 00:00:00 2001 From: "J. Alex Aycinena" Date: Mon, 13 Jun 2011 04:42:27 +0000 Subject: [PATCH] Correct memory handling of scm_to_locale_string per guile manual git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@20758 57a11ea4-9604-0410-9ed3-97b8803252fd --- .../qif-import/dialog-account-picker.c | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/import-export/qif-import/dialog-account-picker.c b/src/import-export/qif-import/dialog-account-picker.c index 87ae81ba2e..0cf5ac74b7 100644 --- a/src/import-export/qif-import/dialog-account-picker.c +++ b/src/import-export/qif-import/dialog-account-picker.c @@ -74,7 +74,7 @@ acct_tree_add_accts(SCM accts, GtkTreeRowReference **reference) { GtkTreeIter iter; - const char * compname; + char * compname; char * acctname; gboolean leafnode; SCM current; @@ -92,9 +92,17 @@ acct_tree_add_accts(SCM accts, } if (scm_is_string(SCM_CAR(current))) - compname = scm_to_locale_string(SCM_CAR(current)); + { + char * str; + + scm_dynwind_begin (0); + str = scm_to_locale_string (SCM_CAR(current)); + compname = g_strdup(str); + scm_dynwind_free (str); + scm_dynwind_end (); + } else - compname = ""; + compname = g_strdup(""); if (!scm_is_null(SCM_CADDR(current))) { @@ -140,6 +148,7 @@ acct_tree_add_accts(SCM accts, } g_free(acctname); + g_free(compname); accts = SCM_CDR(accts); } @@ -327,8 +336,16 @@ qif_account_picker_dialog(QIFImportWindow * qif_wind, SCM map_entry) scm_gc_protect_object(wind->map_entry); /* Set the initial account to be selected. */ - wind->selected_name = g_strdup(scm_to_locale_string(orig_acct)); + if (scm_is_string(orig_acct)) + { + char * str; + scm_dynwind_begin (0); + str = scm_to_locale_string (orig_acct); + wind->selected_name = g_strdup(str); + scm_dynwind_free (str); + scm_dynwind_end (); + } xml = gnc_glade_xml_new("qif.glade", "QIF Import Account Picker");