[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