Correct memory handling of scm_to_locale_string per guile manual

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@20744 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
J. Alex Aycinena
2011-06-09 22:40:54 +00:00
parent 8d57666936
commit 6e3ac5d193
2 changed files with 12 additions and 6 deletions

View File

@@ -1322,11 +1322,14 @@ gnc_parse_time_to_timet(const gchar *s, const gchar *format)
gchar *gnc_scm_to_locale_string(SCM scm_string)
{
gchar* s;
char* x = scm_to_locale_string(scm_string);
char * str;
/* scm_to_locale_string() returns a malloc'ed string in guile-1.8
(but not in guile-1.6). Copy to a g_malloc'ed one. */
s = g_strdup(x);
free(x);
scm_dynwind_begin (0);
str = scm_to_locale_string(scm_string);
/* prevent memory leaks in scm_to_locale_string() per guile manual; see 'http://www.gnu.org/software/guile/manual/html_node/Dynamic-Wind.html#Dynamic-Wind' */
s = g_strdup(str);
scm_dynwind_free (str);
scm_dynwind_end ();
return s;
}

View File

@@ -20,7 +20,7 @@ test_query (Query *q, SCM val2str)
SCM res_q;
SCM args = SCM_EOL;
Query *q2;
const gchar * str;
char * str;
gchar *str2 = NULL;
scm_q = gnc_query2scm (q);
@@ -30,8 +30,11 @@ test_query (Query *q, SCM val2str)
args = scm_cons (scm_makfrom0str ("'"), scm_cons (str_q, SCM_EOL));
str_q = scm_string_append (args);
scm_dynwind_begin (0);
str = scm_to_locale_string (str_q);
if (str) str2 = g_strdup(str);
scm_dynwind_free (str);
scm_dynwind_end ();
if (str2)
{
res_q = scm_c_eval_string (str2);