r20733 - gnucash/trunk/src/engine - Correct memory leak found with Valgrind.
J. Alex Aycinena
alex.aycinena at code.gnucash.org
Fri Jun 3 04:24:27 EDT 2011
Author: alex.aycinena
Date: 2011-06-03 04:24:27 -0400 (Fri, 03 Jun 2011)
New Revision: 20733
Trac: http://svn.gnucash.org/trac/changeset/20733
Modified:
gnucash/trunk/src/engine/engine-helpers.c
Log:
Correct memory leak found with Valgrind.
Modified: gnucash/trunk/src/engine/engine-helpers.c
===================================================================
--- gnucash/trunk/src/engine/engine-helpers.c 2011-06-02 18:47:18 UTC (rev 20732)
+++ gnucash/trunk/src/engine/engine-helpers.c 2011-06-03 08:24:27 UTC (rev 20733)
@@ -159,7 +159,8 @@
gnc_guid_p(SCM guid_scm)
{
GncGUID guid;
- const gchar * str;
+ gchar * str;
+ int return_int;
if (!scm_is_string(guid_scm))
return FALSE;
@@ -168,9 +169,12 @@
{
return FALSE;
}
+ scm_dynwind_begin (0);
str = scm_to_locale_string (guid_scm);
-
- return string_to_guid(str, &guid);
+ return_int = string_to_guid(str, &guid);
+ scm_dynwind_free (str);
+ scm_dynwind_end ();
+ return return_int;
}
@@ -537,7 +541,7 @@
}
static KvpValueType
-gnc_scm2KvpValueTypeype (SCM value_type_scm)
+gnc_scm2KvpValueType (SCM value_type_scm)
{
return scm_num2int(value_type_scm, SCM_ARG1, G_STRFUNC);
}
@@ -663,7 +667,7 @@
return NULL;
type_scm = SCM_CAR (value_scm);
- value_t = gnc_scm2KvpValueTypeype (type_scm);
+ value_t = gnc_scm2KvpValueType (type_scm);
value_scm = SCM_CDR (value_scm);
if (!scm_is_list (value_scm) || scm_is_null (value_scm))
@@ -683,8 +687,12 @@
case KVP_TYPE_STRING:
{
- const gchar * str = scm_to_locale_string (val_scm);
+ gchar * str;
+ scm_dynwind_begin (0);
+ str = scm_to_locale_string (val_scm);
value = kvp_value_new_string (str);
+ scm_dynwind_free (str);
+ scm_dynwind_end ();
break;
}
@@ -785,7 +793,7 @@
KvpValue *value;
SCM key_scm;
SCM val_scm;
- const gchar *key;
+ gchar *key;
if (!scm_is_pair (pair))
continue;
@@ -796,14 +804,24 @@
if (!scm_is_string (key_scm))
continue;
+ scm_dynwind_begin (0);
key = scm_to_locale_string (key_scm);
if (!key)
+ {
+ scm_dynwind_free (key);
+ scm_dynwind_end ();
continue;
-
+ }
value = gnc_scm2KvpValue (val_scm);
- if (!value) continue;
-
+ if (!value)
+ {
+ scm_dynwind_free (key);
+ scm_dynwind_end ();
+ continue;
+ }
kvp_frame_set_slot_nc (frame, key, value);
+ scm_dynwind_free (key);
+ scm_dynwind_end ();
}
return frame;
@@ -952,7 +970,7 @@
{
QofStringMatch options;
gboolean is_regex;
- const gchar *matchstring;
+ gchar *matchstring;
scm = SCM_CAR (qt_scm);
qt_scm = SCM_CDR (qt_scm);
@@ -968,10 +986,13 @@
qt_scm = SCM_CDR (qt_scm);
if (!scm_is_string (scm)) break;
+ scm_dynwind_begin (0);
matchstring = scm_to_locale_string (scm);
pd = qof_query_string_predicate (compare_how, matchstring,
options, is_regex);
+ scm_dynwind_free (matchstring);
+ scm_dynwind_end ();
}
else if (!safe_strcmp (type, QOF_TYPE_DATE))
{
@@ -1077,7 +1098,7 @@
else if (!safe_strcmp (type, QOF_TYPE_CHAR))
{
QofCharMatch options;
- const gchar *char_list;
+ gchar *char_list;
scm = SCM_CAR (qt_scm);
qt_scm = SCM_CDR (qt_scm);
@@ -1089,9 +1110,12 @@
qt_scm = SCM_CDR (qt_scm);
if (!scm_is_string (scm))
break;
+ scm_dynwind_begin (0);
char_list = scm_to_locale_string (scm);
pd = qof_query_char_predicate (options, char_list);
+ scm_dynwind_free (char_list);
+ scm_dynwind_end ();
}
else if (!safe_strcmp (type, QOF_TYPE_KVP))
{
@@ -1333,7 +1357,7 @@
{
gboolean case_sens;
gboolean use_regexp;
- const gchar *matchstring;
+ gchar *matchstring;
/* case_sens */
if (scm_is_null (query_term_scm))
@@ -1357,6 +1381,7 @@
scm = SCM_CAR (query_term_scm);
query_term_scm = SCM_CDR (query_term_scm);
+ scm_dynwind_begin (0);
matchstring = scm_to_locale_string (scm);
if (!safe_strcmp (pr_type, "pr-action"))
@@ -1391,6 +1416,8 @@
{
PINFO ("Unknown string predicate: %s", pr_type);
}
+ scm_dynwind_free (matchstring);
+ scm_dynwind_end ();
}
else if (!safe_strcmp (pd_type, "pd-cleared"))
@@ -1430,6 +1457,7 @@
{
GncGUID guid;
QofIdType id_type;
+ gchar *str;
/* guid */
if (scm_is_null (query_term_scm))
@@ -1442,9 +1470,14 @@
/* id type */
scm = SCM_CAR (query_term_scm);
query_term_scm = SCM_CDR (query_term_scm);
- id_type = g_strdup (scm_to_locale_string (scm));
+ scm_dynwind_begin (0);
+ str = scm_to_locale_string (scm);
+ id_type = g_strdup (str);
+ scm_dynwind_free (str);
+ scm_dynwind_end ();
xaccQueryAddGUIDMatch (q, &guid, id_type, QOF_QUERY_OR);
+ g_free ((void *) id_type);
ok = TRUE;
}
More information about the gnucash-changes
mailing list