[Gnucash-changes] remove really dorky memory leak during debug
printing
Linas Vepstas
linas at cvs.gnucash.org
Sun Jul 4 13:26:51 EDT 2004
Log Message:
-----------
remove really dorky memory leak during debug printing
Modified Files:
--------------
gnucash/src/engine:
gnc-numeric.c
gnc-numeric.h
cap-gains.c
Scrub3.c
Scrub.c
Scrub2.c
Revision Data
-------------
Index: Scrub2.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Scrub2.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -Lsrc/engine/Scrub2.c -Lsrc/engine/Scrub2.c -u -r1.37 -r1.38
--- src/engine/Scrub2.c
+++ src/engine/Scrub2.c
@@ -134,9 +134,9 @@
PERR ("Accounting Policy gave us a split that "
"doesn't fit into this lot\n"
"lot baln=%s, isclosed=%d, aplit amt=%s",
- gnc_numeric_to_string (gnc_lot_get_balance(lot)),
+ gnc_num_dbg_to_string (gnc_lot_get_balance(lot)),
gnc_lot_is_closed (lot),
- gnc_numeric_to_string (split->amount));
+ gnc_num_dbg_to_string (split->amount));
break;
}
@@ -196,8 +196,8 @@
value = gnc_numeric_add (value, xaccSplitGetValue (s),
GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT);
PINFO ("Split=%p value=%s Accum Lot value=%s", s,
- gnc_numeric_to_string (s->value),
- gnc_numeric_to_string (value));
+ gnc_num_dbg_to_string (s->value),
+ gnc_num_dbg_to_string (value));
}
@@ -210,14 +210,14 @@
* error, and fix that.
*/
PERR ("Closed lot fails to double-balance !! lot value=%s",
- gnc_numeric_to_string (value));
+ gnc_num_dbg_to_string (value));
GList *node;
for (node=lot->splits; node; node=node->next)
{
Split *s = node->data;
PERR ("s=%p amt=%s val=%s", s,
- gnc_numeric_to_string(s->amount),
- gnc_numeric_to_string(s->value));
+ gnc_num_dbg_to_string(s->amount),
+ gnc_num_dbg_to_string(s->value));
}
}
@@ -286,9 +286,9 @@
"\tdst_amt=%s src_val=%s src_amt=%s\n",
xaccAccountGetName (s->acc),
xaccTransGetDescription(txn),
- gnc_numeric_to_string(dst_amt),
- gnc_numeric_to_string(src_val),
- gnc_numeric_to_string(src_amt));
+ gnc_num_dbg_to_string(dst_amt),
+ gnc_num_dbg_to_string(src_val),
+ gnc_num_dbg_to_string(src_amt));
continue;
}
@@ -410,7 +410,7 @@
txn = split->parent;
lot = xaccSplitGetLot (split);
- ENTER (" ");
+ ENTER ("(Lot=%s)", gnc_lot_get_title(lot));
restart:
for (node=txn->splits; node; node=node->next)
{
Index: gnc-numeric.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/gnc-numeric.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -Lsrc/engine/gnc-numeric.c -Lsrc/engine/gnc-numeric.c -u -r1.53 -r1.54
--- src/engine/gnc-numeric.c
+++ src/engine/gnc-numeric.c
@@ -1168,6 +1168,22 @@
return result;
}
+gchar *
+gnc_num_dbg_to_string(gnc_numeric n)
+{
+ static char buff[1000];
+ static char *p = buff;
+ long long int tmpnum = n.num;
+ long long int tmpdenom = n.denom;
+
+ p+= 100;
+ if (p-buff >= 1000) p = buff;
+
+ sprintf(p, "%lld/%lld", tmpnum, tmpdenom);
+
+ return p;
+}
+
const gchar *
string_to_gnc_numeric(const gchar* str, gnc_numeric *n)
{
Index: Scrub.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Scrub.c,v
retrieving revision 1.62
retrieving revision 1.63
diff -Lsrc/engine/Scrub.c -Lsrc/engine/Scrub.c -u -r1.62 -r1.63
--- src/engine/Scrub.c
+++ src/engine/Scrub.c
@@ -272,9 +272,9 @@
PINFO ("Adjusted split with mismatched values, desc=\"%s\" memo=\"%s\""
" old amount %s %s, new amount %s",
trans->description, split->memo,
- gnc_numeric_to_string (xaccSplitGetAmount(split)),
+ gnc_num_dbg_to_string (xaccSplitGetAmount(split)),
gnc_commodity_get_mnemonic (currency),
- gnc_numeric_to_string (xaccSplitGetValue(split)));
+ gnc_num_dbg_to_string (xaccSplitGetValue(split)));
xaccTransBeginEdit (trans);
xaccSplitSetAmount (split, value);
@@ -638,9 +638,9 @@
PWARN ("Adjusted split with mismatched values, desc=\"%s\" memo=\"%s\""
" old amount %s %s, new amount %s",
trans->description, sp->memo,
- gnc_numeric_to_string (xaccSplitGetAmount(sp)),
+ gnc_num_dbg_to_string (xaccSplitGetAmount(sp)),
gnc_commodity_get_mnemonic (currency),
- gnc_numeric_to_string (xaccSplitGetValue(sp)));
+ gnc_num_dbg_to_string (xaccSplitGetValue(sp)));
xaccTransBeginEdit (trans);
xaccSplitSetAmount (sp, xaccSplitGetValue(sp));
xaccTransCommitEdit (trans);
@@ -649,9 +649,9 @@
{
PINFO ("Ok: Split '%s' Amount %s %s, value %s %s",
xaccSplitGetMemo (sp),
- gnc_numeric_to_string (amount),
+ gnc_num_dbg_to_string (amount),
gnc_commodity_get_mnemonic (currency),
- gnc_numeric_to_string (value),
+ gnc_num_dbg_to_string (value),
gnc_commodity_get_mnemonic (acc_currency));
}*/
}
Index: gnc-numeric.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/gnc-numeric.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -Lsrc/engine/gnc-numeric.h -Lsrc/engine/gnc-numeric.h -u -r1.21 -r1.22
--- src/engine/gnc-numeric.h
+++ src/engine/gnc-numeric.h
@@ -327,6 +327,10 @@
/** Convert to string. The returned buffer is to be g_free'd by the
* caller (it was allocated through g_strdup) */
gchar *gnc_numeric_to_string(gnc_numeric n);
+
+/** Convert to string. Uses a static, non-thread-safe buffer.
+ * For internal use only. */
+gchar * gnc_num_dbg_to_string(gnc_numeric n);
/** @}*/
/** @name Comparisons and Predicates */
Index: Scrub3.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Scrub3.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -Lsrc/engine/Scrub3.c -Lsrc/engine/Scrub3.c -u -r1.13 -r1.14
--- src/engine/Scrub3.c
+++ src/engine/Scrub3.c
@@ -103,7 +103,7 @@
/* If the lot balance is zero, we don't need to rebalance */
lot_baln = gnc_lot_get_balance (lot);
- PINFO ("lot baln=%s for %s", gnc_numeric_to_string (lot_baln),
+ PINFO ("lot baln=%s for %s", gnc_num_dbg_to_string (lot_baln),
gnc_lot_get_title(lot));
if (! gnc_numeric_zero_p (lot_baln))
{
@@ -112,7 +112,7 @@
/* Get the opening balance for this lot */
pcy->PolicyGetLotOpening (pcy, lot, &opening_baln, NULL, NULL);
- PINFO ("lot opner baln=%s", gnc_numeric_to_string (opening_baln));
+ PINFO ("lot opener baln=%s", gnc_num_dbg_to_string (opening_baln));
/* If the lot is fat, give the boot to all the non-opening
* splits, and refill it */
@@ -165,7 +165,7 @@
if (!acc) return;
if (FALSE == xaccAccountHasTrades (acc)) return;
- ENTER ("acc=%s", acc->accountName);
+ ENTER ("(acc=%s)", acc->accountName);
xaccAccountBeginEdit(acc);
xaccAccountAssignLots (acc);
@@ -175,7 +175,7 @@
xaccScrubLot (lot);
}
xaccAccountCommitEdit(acc);
- LEAVE ("acc=%s", acc->accountName);
+ LEAVE ("(acc=%s)", acc->accountName);
}
/* ============================================================== */
Index: cap-gains.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/cap-gains.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -Lsrc/engine/cap-gains.c -Lsrc/engine/cap-gains.c -u -r1.27 -r1.28
--- src/engine/cap-gains.c
+++ src/engine/cap-gains.c
@@ -376,14 +376,14 @@
if (xaccTransGetVoidStatus(split->parent)) return NULL;
PWARN ("split with zero amount; value=%s gflag=%x gsplit=%p",
- gnc_numeric_to_string (split->amount),
+ gnc_num_dbg_to_string (split->amount),
split->gains,
split->gains_split);
if (split->gains_split)
{
PWARN ("gains amt=%s value=%s",
- gnc_numeric_to_string (split->gains_split->amount),
- gnc_numeric_to_string (split->gains_split->value));
+ gnc_num_dbg_to_string (split->gains_split->amount),
+ gnc_num_dbg_to_string (split->gains_split->value));
}
return NULL;
}
@@ -400,7 +400,7 @@
xaccAccountBeginEdit (acc);
gnc_lot_add_split (lot, split);
PINFO ("added split to empty lot, new lot baln=%s (%s)",
- gnc_numeric_to_string (gnc_lot_get_balance(lot)),
+ gnc_num_dbg_to_string (gnc_lot_get_balance(lot)),
gnc_lot_get_title (lot));
xaccAccountCommitEdit (acc);
return NULL;
@@ -421,8 +421,8 @@
{
PWARN ("accounting policy gave us split that enlarges the lot!\n"
"old lot baln=%s split amt=%s lot=%s",
- gnc_numeric_to_string (gnc_lot_get_balance(lot)),
- gnc_numeric_to_string (split->amount),
+ gnc_num_dbg_to_string (gnc_lot_get_balance(lot)),
+ gnc_num_dbg_to_string (split->amount),
gnc_lot_get_title (lot));
acc = split->acc;
@@ -439,7 +439,7 @@
cmp = gnc_numeric_compare (gnc_numeric_abs(split->amount),
gnc_numeric_abs(baln));
- PINFO ("found open lot with baln=%s (%s)", gnc_numeric_to_string (baln),
+ PINFO ("found open lot with baln=%s (%s)", gnc_num_dbg_to_string (baln),
gnc_lot_get_title (lot));
/* cmp == -1 if amt < baln, ==0 if amt==baln */
@@ -449,7 +449,7 @@
xaccAccountBeginEdit (acc);
gnc_lot_add_split (lot, split);
PINFO ("simple added split to lot, new lot baln=%s",
- gnc_numeric_to_string (gnc_lot_get_balance(lot)));
+ gnc_num_dbg_to_string (gnc_lot_get_balance(lot)));
xaccAccountCommitEdit (acc);
return NULL;
}
@@ -476,8 +476,8 @@
PINFO ("++++++++++++++ splitting split=%p into amt = %s + %s",
split,
- gnc_numeric_to_string(amt_a),
- gnc_numeric_to_string(amt_b) );
+ gnc_num_dbg_to_string(amt_a),
+ gnc_num_dbg_to_string(amt_b) );
/* Compute the value so that it holds in the same proportion:
* i.e. so that (amt_a / amt_tot) = (val_a / val_tot)
@@ -497,9 +497,9 @@
"\tval_tot=%s amt_a=%s amt_tot=%s\n",
xaccAccountGetName(acc),
xaccTransGetDescription(trans),
- gnc_numeric_to_string(val_tot),
- gnc_numeric_to_string(amt_a),
- gnc_numeric_to_string(amt_tot));
+ gnc_num_dbg_to_string(val_tot),
+ gnc_num_dbg_to_string(amt_a),
+ gnc_num_dbg_to_string(amt_tot));
}
if (gnc_numeric_zero_p(val_a) || gnc_numeric_zero_p(val_b))
@@ -508,9 +508,9 @@
}
PINFO ("split value is = %s = %s + %s",
- gnc_numeric_to_string(val_tot),
- gnc_numeric_to_string(val_a),
- gnc_numeric_to_string(val_b) );
+ gnc_num_dbg_to_string(val_tot),
+ gnc_num_dbg_to_string(val_a),
+ gnc_num_dbg_to_string(val_b) );
xaccSplitSetAmount (split, amt_a);
xaccSplitSetValue (split, val_a);
@@ -608,7 +608,7 @@
*/
while (split)
{
- PINFO ("have split amount=%s", gnc_numeric_to_string (split->amount));
+ PINFO ("have split amount=%s", gnc_num_dbg_to_string (split->amount));
split->gains |= GAINS_STATUS_VDIRTY;
lot = pcy->PolicyGetLot (pcy, split);
if (!lot)
@@ -787,14 +787,14 @@
for (n=lot->splits; n; n=n->next)
{
Split *s = n->data;
- PINFO ("split amt=%s", gnc_numeric_to_string(s->amount));
+ PINFO ("split amt=%s", gnc_num_dbg_to_string(s->amount));
}
PERR ("Malformed Lot \"%s\"! (too thin!) "
"opening amt=%s split amt=%s baln=%s",
gnc_lot_get_title (lot),
- gnc_numeric_to_string (opening_amount),
- gnc_numeric_to_string (split->amount),
- gnc_numeric_to_string (gnc_lot_get_balance(lot)));
+ gnc_num_dbg_to_string (opening_amount),
+ gnc_num_dbg_to_string (split->amount),
+ gnc_num_dbg_to_string (gnc_lot_get_balance(lot)));
return;
}
if ( (gnc_numeric_negative_p(opening_amount) ||
@@ -806,14 +806,14 @@
for (n=lot->splits; n; n=n->next)
{
Split *s = n->data;
- PINFO ("split amt=%s", gnc_numeric_to_string(s->amount));
+ PINFO ("split amt=%s", gnc_num_dbg_to_string(s->amount));
}
PERR ("Malformed Lot \"%s\"! (too fat!) "
"opening amt=%s split amt=%s baln=%s",
gnc_lot_get_title (lot),
- gnc_numeric_to_string (opening_amount),
- gnc_numeric_to_string (split->amount),
- gnc_numeric_to_string (gnc_lot_get_balance(lot)));
+ gnc_num_dbg_to_string (opening_amount),
+ gnc_num_dbg_to_string (split->amount),
+ gnc_num_dbg_to_string (gnc_lot_get_balance(lot)));
return;
}
@@ -833,11 +833,11 @@
value = gnc_numeric_sub (value, split->value,
GNC_DENOM_AUTO, GNC_HOW_DENOM_FIXED);
PINFO ("Open amt=%s val=%s; split amt=%s val=%s; gains=%s\n",
- gnc_numeric_to_string (opening_amount),
- gnc_numeric_to_string (opening_value),
- gnc_numeric_to_string (split->amount),
- gnc_numeric_to_string (split->value),
- gnc_numeric_to_string (value));
+ gnc_num_dbg_to_string (opening_amount),
+ gnc_num_dbg_to_string (opening_value),
+ gnc_num_dbg_to_string (split->amount),
+ gnc_num_dbg_to_string (split->value),
+ gnc_num_dbg_to_string (value));
if (gnc_numeric_check (value))
{
PERR ("Numeric overflow during gains calculation\n"
@@ -845,11 +845,11 @@
"\tOpen amt=%s val=%s\n\tsplit amt=%s val=%s\n\tgains=%s\n",
xaccAccountGetName(split->acc),
xaccTransGetDescription(split->parent),
- gnc_numeric_to_string (opening_amount),
- gnc_numeric_to_string (opening_value),
- gnc_numeric_to_string (split->amount),
- gnc_numeric_to_string (split->value),
- gnc_numeric_to_string (value));
+ gnc_num_dbg_to_string (opening_amount),
+ gnc_num_dbg_to_string (opening_value),
+ gnc_num_dbg_to_string (split->amount),
+ gnc_num_dbg_to_string (split->value),
+ gnc_num_dbg_to_string (value));
return;
}
More information about the gnucash-changes
mailing list