r20744 - gnucash/trunk/src/app-utils - Correct memory handling of scm_to_locale_string per guile manual
J. Alex Aycinena
alex.aycinena at code.gnucash.org
Thu Jun 9 18:40:54 EDT 2011
Author: alex.aycinena
Date: 2011-06-09 18:40:54 -0400 (Thu, 09 Jun 2011)
New Revision: 20744
Trac: http://svn.gnucash.org/trac/changeset/20744
Modified:
gnucash/trunk/src/app-utils/guile-util.c
gnucash/trunk/src/app-utils/test/test-scm-query-string.c
Log:
Correct memory handling of scm_to_locale_string per guile manual
Modified: gnucash/trunk/src/app-utils/guile-util.c
===================================================================
--- gnucash/trunk/src/app-utils/guile-util.c 2011-06-09 21:43:36 UTC (rev 20743)
+++ gnucash/trunk/src/app-utils/guile-util.c 2011-06-09 22:40:54 UTC (rev 20744)
@@ -1322,11 +1322,14 @@
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;
}
Modified: gnucash/trunk/src/app-utils/test/test-scm-query-string.c
===================================================================
--- gnucash/trunk/src/app-utils/test/test-scm-query-string.c 2011-06-09 21:43:36 UTC (rev 20743)
+++ gnucash/trunk/src/app-utils/test/test-scm-query-string.c 2011-06-09 22:40:54 UTC (rev 20744)
@@ -20,7 +20,7 @@
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 @@
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);
More information about the gnucash-changes
mailing list