mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Fix double free of the targetList, Add kvp_value_to_bare_string
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@10906 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
9f9ce9c60a
commit
26ad9d4348
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
||||
2005-02-20 Neil Williams <linux@codehelp.co.uk>
|
||||
* src/engine/qof_book_merge.c: Fix double free of the targetList
|
||||
entities that cause xaccGroupGetNumSubAccounts to generate a
|
||||
segmentation fault.
|
||||
* src/engine/kvp_frame.c:
|
||||
* src/engine/kvp_frame.h:
|
||||
Add kvp_value_to_bare_string to
|
||||
generate strings without debug information.
|
||||
* src/engine/qofsession.h:
|
||||
* src/engine/qofsession.c:
|
||||
Documentation tweaks to bring them into line with QOF and the
|
||||
gnucash-gnome2-dev branch.
|
||||
|
||||
2005-02-16 Derek Atkins <derek@ihtfp.com>
|
||||
|
||||
* src/gnome-utils/dialog-utils.c: When trying to load the symbol
|
||||
|
@ -496,8 +496,9 @@ kvp_frame_replace_value_nc (KvpFrame * frame, const char * key_path,
|
||||
KvpValue * new_value)
|
||||
{
|
||||
KvpValue * old_value;
|
||||
char *last_key = NULL;
|
||||
char *last_key;
|
||||
|
||||
last_key = NULL;
|
||||
if (new_value)
|
||||
{
|
||||
frame = get_trailer_make (frame, key_path, &last_key);
|
||||
@ -1635,6 +1636,81 @@ kvp_value_glist_to_string(const GList *list)
|
||||
return tmp2;
|
||||
}
|
||||
|
||||
gchar*
|
||||
kvp_value_to_bare_string(const KvpValue *val)
|
||||
{
|
||||
gchar *tmp1;
|
||||
gchar *tmp2;
|
||||
const gchar *ctmp;
|
||||
|
||||
g_return_val_if_fail(val, NULL);
|
||||
|
||||
switch(kvp_value_get_type(val))
|
||||
{
|
||||
case KVP_TYPE_GINT64:
|
||||
return g_strdup_printf("%lld",(long long int) kvp_value_get_gint64(val));
|
||||
break;
|
||||
|
||||
case KVP_TYPE_DOUBLE:
|
||||
return g_strdup_printf("(%g)", kvp_value_get_double(val));
|
||||
break;
|
||||
|
||||
case KVP_TYPE_NUMERIC:
|
||||
tmp1 = gnc_numeric_to_string(kvp_value_get_numeric(val));
|
||||
tmp2 = g_strdup_printf("%s", tmp1 ? tmp1 : "");
|
||||
g_free(tmp1);
|
||||
return tmp2;
|
||||
break;
|
||||
|
||||
case KVP_TYPE_STRING:
|
||||
tmp1 = kvp_value_get_string (val);
|
||||
return g_strdup_printf("%s", tmp1 ? tmp1 : "");
|
||||
break;
|
||||
|
||||
case KVP_TYPE_GUID:
|
||||
ctmp = guid_to_string(kvp_value_get_guid(val));
|
||||
tmp2 = g_strdup_printf("%s", ctmp ? ctmp : "");
|
||||
return tmp2;
|
||||
break;
|
||||
|
||||
case KVP_TYPE_TIMESPEC:
|
||||
tmp1 = g_new0 (char, 40);
|
||||
gnc_timespec_to_iso8601_buff (kvp_value_get_timespec (val), tmp1);
|
||||
tmp2 = g_strdup_printf("%s", tmp1);
|
||||
g_free(tmp1);
|
||||
return tmp2;
|
||||
break;
|
||||
|
||||
case KVP_TYPE_BINARY:
|
||||
{
|
||||
guint64 len;
|
||||
void *data;
|
||||
data = kvp_value_get_binary(val, &len);
|
||||
tmp1 = binary_to_string(data, len);
|
||||
return g_strdup_printf("%s", tmp1 ? tmp1 : "");
|
||||
}
|
||||
break;
|
||||
|
||||
case KVP_TYPE_GLIST:
|
||||
tmp1 = kvp_value_glist_to_string(kvp_value_get_glist(val));
|
||||
tmp2 = g_strdup_printf("%s", tmp1 ? tmp1 : "");
|
||||
g_free(tmp1);
|
||||
return tmp2;
|
||||
break;
|
||||
|
||||
case KVP_TYPE_FRAME:
|
||||
tmp1 = kvp_frame_to_string(kvp_value_get_frame(val));
|
||||
tmp2 = g_strdup_printf("%s", tmp1 ? tmp1 : "");
|
||||
g_free(tmp1);
|
||||
return tmp2;
|
||||
break;
|
||||
|
||||
default:
|
||||
return g_strdup_printf(" ");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gchar*
|
||||
kvp_value_to_string(const KvpValue *val)
|
||||
{
|
||||
|
@ -603,7 +603,17 @@ gint kvp_value_compare(const KvpValue *va, const KvpValue *vb);
|
||||
|
||||
/*@}*/
|
||||
|
||||
/** \brief General purpose function to convert any KvpValue to a string.
|
||||
|
||||
Only the bare string is returned, there is no debugging information.
|
||||
*/
|
||||
gchar* kvp_value_to_bare_string(const KvpValue *val);
|
||||
|
||||
/** \brief Debug version of kvp_value_to_string
|
||||
|
||||
This version is used only by ::qof_query_printValueForParam,
|
||||
itself a debugging and development utility function.
|
||||
*/
|
||||
gchar* kvp_value_to_string(const KvpValue *val);
|
||||
|
||||
/** Manipulator:
|
||||
|
@ -104,10 +104,6 @@ qof_book_merge_abort (qof_book_mergeData *mergeData)
|
||||
}
|
||||
mergeData->mergeList = g_list_next(mergeData->mergeList);
|
||||
}
|
||||
while(mergeData->targetList != NULL) {
|
||||
g_free(mergeData->targetList->data);
|
||||
mergeData->targetList = g_slist_next(mergeData->targetList);
|
||||
}
|
||||
g_list_free(mergeData->mergeList);
|
||||
g_slist_free(mergeData->mergeObjectParams);
|
||||
g_slist_free(mergeData->targetList);
|
||||
@ -286,10 +282,6 @@ qof_book_mergeCommit( qof_book_mergeData *mergeData )
|
||||
g_slist_free(currentRule->linkedEntList);
|
||||
mergeData->mergeList = g_list_next(mergeData->mergeList);
|
||||
}
|
||||
while(mergeData->targetList != NULL) {
|
||||
g_free(mergeData->targetList->data);
|
||||
mergeData->targetList = g_slist_next(mergeData->targetList);
|
||||
}
|
||||
g_list_free(mergeData->mergeList);
|
||||
g_slist_free(mergeData->mergeObjectParams);
|
||||
g_slist_free(mergeData->targetList);
|
||||
|
@ -269,8 +269,6 @@ qof_session_get_url (QofSession *session)
|
||||
return session->book_id;
|
||||
}
|
||||
|
||||
/* ====================================================================== */
|
||||
|
||||
#ifdef GNUCASH_MAJOR_VERSION
|
||||
|
||||
static void
|
||||
@ -469,7 +467,7 @@ qof_session_begin (QofSession *session, const char * book_id,
|
||||
/* destroy the old backend */
|
||||
qof_session_destroy_backend(session);
|
||||
|
||||
/* Look for somthing of the form of "file:/", "http://" or
|
||||
/* Look for something of the form of "file:/", "http://" or
|
||||
* "postgres://". Everything before the colon is the access
|
||||
* method. Load the first backend found for that access method.
|
||||
*/
|
||||
|
@ -92,7 +92,6 @@
|
||||
|
||||
/* PROTOTYPES ******************************************************/
|
||||
|
||||
/** QofSession definition */
|
||||
typedef struct _QofSession QofSession;
|
||||
|
||||
QofSession * qof_session_new (void);
|
||||
|
Loading…
Reference in New Issue
Block a user