]> granicus.if.org Git - postgresql/commitdiff
Add PGTYPESchar_free() to avoid cross-module problems on Windows.
authorThomas Munro <tmunro@postgresql.org>
Mon, 18 Jun 2018 06:33:53 +0000 (18:33 +1200)
committerThomas Munro <tmunro@postgresql.org>
Mon, 18 Jun 2018 06:33:53 +0000 (18:33 +1200)
On Windows, it is sometimes important for corresponding malloc() and
free() calls to be made from the same DLL, since some build options can
result in multiple allocators being active at the same time.  For that
reason we already provided PQfreemem().  This commit adds a similar
function for freeing string results allocated by the pgtypes library.

Author: Takayuki Tsunakawa
Reviewed-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/0A3221C70F24FB45833433255569204D1F8AD5D6%40G01JPEXMBYT05

20 files changed:
doc/src/sgml/ecpg.sgml
src/interfaces/ecpg/include/Makefile
src/interfaces/ecpg/include/pgtypes.h [new file with mode: 0644]
src/interfaces/ecpg/include/pgtypes_date.h
src/interfaces/ecpg/include/pgtypes_interval.h
src/interfaces/ecpg/include/pgtypes_numeric.h
src/interfaces/ecpg/include/pgtypes_timestamp.h
src/interfaces/ecpg/pgtypeslib/common.c
src/interfaces/ecpg/pgtypeslib/exports.txt
src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c
src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
src/interfaces/ecpg/test/expected/pgtypeslib-num_test.c
src/interfaces/ecpg/test/expected/pgtypeslib-num_test2.c
src/interfaces/ecpg/test/expected/preproc-outofscope.c
src/interfaces/ecpg/test/expected/sql-sqlda.c
src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc
src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
src/interfaces/ecpg/test/pgtypeslib/num_test.pgc
src/interfaces/ecpg/test/pgtypeslib/num_test2.pgc
src/interfaces/ecpg/test/sql/sqlda.pgc

index f23a83dbc3534dc399a178fbaf030efc661000ac..fac45400b03c3a0a33dae79487cf4418e96cb365 100644 (file)
@@ -1951,11 +1951,23 @@ EXEC SQL SELECT started, duration INTO :ts1, :iv1 FROM datetbl WHERE d=:date1;
 PGTYPEStimestamp_add_interval(&ts1, &iv1, &tsout);
 out = PGTYPEStimestamp_to_asc(&tsout);
 printf("Started + duration: %s\n", out);
-free(out);
+PGTYPESchar_free(out);
 ]]>
 </programlisting>
   </para>
 
+  <sect2 id="ecpg-pgtypes-cstrings">
+   <title>Character Strings</title>
+   <para>
+   Some functions such as <function>PGTYPESnumeric_to_asc</function> return
+   a pointer to a freshly allocated character string. These results should be
+   freed with <function>PGTYPESchar_free</function> instead of
+   <function>free</function>. (This is important only on Windows, where
+   memory allocation and release sometimes need to be done by the same
+   library.)
+   </para>
+  </sect2>
+
   <sect2 id="ecpg-pgtypes-numeric">
    <title>The numeric Type</title>
    <para>
@@ -2029,6 +2041,7 @@ char *PGTYPESnumeric_to_asc(numeric *num, int dscale);
 </synopsis>
        The numeric value will be printed with <literal>dscale</literal> decimal
        digits, with rounding applied if necessary.
+       The result must be freed with <function>PGTYPESchar_free()</function>.
       </para>
      </listitem>
     </varlistentry>
@@ -2419,6 +2432,7 @@ char *PGTYPESdate_to_asc(date dDate);
         The function receives the date <literal>dDate</literal> as its only parameter.
         It will output the date in the form <literal>1999-01-18</literal>, i.e., in the
         <literal>YYYY-MM-DD</literal> format.
+        The result must be freed with <function>PGTYPESchar_free()</function>.
        </para>
       </listitem>
      </varlistentry>
@@ -2841,6 +2855,7 @@ char *PGTYPEStimestamp_to_asc(timestamp tstamp);
         The function receives the timestamp <literal>tstamp</literal> as
         its only argument and returns an allocated string that contains the
         textual representation of the timestamp.
+        The result must be freed with <function>PGTYPESchar_free()</function>.
        </para>
       </listitem>
      </varlistentry>
@@ -3349,6 +3364,7 @@ char *PGTYPESinterval_to_asc(interval *span);
         The function converts the interval variable that <literal>span</literal>
         points to into a C char*. The output looks like this example:
         <literal>@ 1 day 12 hours 59 mins 10 secs</literal>.
+        The result must be freed with <function>PGTYPESchar_free()</function>.
        </para>
       </listitem>
      </varlistentry>
index e92e56f26f37a2c3f854a8a4fb41e5b026f53a6d..9c68bf3c4770c1bd7d8ef15cb4a88ad832afa62d 100644 (file)
@@ -14,7 +14,7 @@ install: all installdirs install-headers
 
 .PHONY: install-headers
 ecpg_headers = ecpgerrno.h ecpglib.h ecpgtype.h sqlca.h sql3types.h ecpg_informix.h \
-       pgtypes_error.h pgtypes_numeric.h pgtypes_timestamp.h pgtypes_date.h pgtypes_interval.h \
+       pgtypes_error.h pgtypes_numeric.h pgtypes_timestamp.h pgtypes_date.h pgtypes_interval.h pgtypes.h \
        sqlda.h sqlda-compat.h sqlda-native.h
 informix_headers = datetime.h decimal.h sqltypes.h
 
diff --git a/src/interfaces/ecpg/include/pgtypes.h b/src/interfaces/ecpg/include/pgtypes.h
new file mode 100644 (file)
index 0000000..dbf759b
--- /dev/null
@@ -0,0 +1,17 @@
+/* src/interfaces/ecpg/include/pgtypes.h */
+
+#ifndef PGTYPES_H
+#define PGTYPES_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+extern void PGTYPESchar_free(char *ptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif                                                 /* PGTYPES_H */
index caf8a33d12589ccc785cf2ce642434b336d3c43b..c668097466e686de94c611983a73692955b00bc1 100644 (file)
@@ -3,6 +3,7 @@
 #ifndef PGTYPES_DATETIME
 #define PGTYPES_DATETIME
 
+#include <pgtypes.h>
 #include <pgtypes_timestamp.h>
 
 typedef long date;
index 5747736fe16922dc0e19131624814c8822a21b24..3b17cd1d115652b44ff0a5a2e7d8f9683a08746b 100644 (file)
@@ -4,6 +4,7 @@
 #define PGTYPES_INTERVAL
 
 #include <ecpg_config.h>
+#include <pgtypes.h>
 
 #ifndef C_H
 
index 56c46ea2729be8626616165dcbefddc72ddff062..5c763a9eb61a9f0156d5ca432fd1a34d8de49391 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef PGTYPES_NUMERIC
 #define PGTYPES_NUMERIC
 
+#include <pgtypes.h>
+
 #define NUMERIC_POS                                            0x0000
 #define NUMERIC_NEG                                            0x4000
 #define NUMERIC_NAN                                            0xC000
index 1545be4ee9be3418af3a70e1af10bb8ef5785fe0..3e2983789124f3070073694261e5c9b4af2220cf 100644 (file)
@@ -3,6 +3,7 @@
 #ifndef PGTYPES_TIMESTAMP
 #define PGTYPES_TIMESTAMP
 
+#include <pgtypes.h>
 /* pgtypes_interval.h includes ecpg_config.h */
 #include <pgtypes_interval.h>
 
index 2adb6809e2013ae313836b7778a0632f1233820d..c5d1621ff1effbdd53a43c3e22e0d68c7dab33ed 100644 (file)
@@ -3,6 +3,7 @@
 #include "postgres_fe.h"
 
 #include "extern.h"
+#include "pgtypes.h"
 
 /* Return value is zero-filled. */
 char *
@@ -136,3 +137,12 @@ pgtypes_fmt_replace(union un_fmt_comb replace_val, int replace_type, char **outp
        }
        return 0;
 }
+
+/* Functions declared in pgtypes.h. */
+
+/* Just frees memory (mostly needed for Windows) */
+void
+PGTYPESchar_free(char *ptr)
+{
+       free(ptr);
+}
index 70ef01a8a7d63bdbea207c7903af0d0d506391cc..2d5ec17656a164b7ec1efe8b793603da3992c4b3 100644 (file)
@@ -45,3 +45,4 @@ PGTYPEStimestamp_from_asc       42
 PGTYPEStimestamp_sub            43
 PGTYPEStimestamp_sub_interval   44
 PGTYPEStimestamp_to_asc         45
+PGTYPESchar_free                46
index 3f90022b544935c9058eb0419b6be7f4738a30e7..1509a56fd85ae6dbc65de42ae54767c2a8ba3a62 100644 (file)
@@ -113,18 +113,18 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 
        text = PGTYPESdate_to_asc(date1);
        printf ("Date: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        text = PGTYPEStimestamp_to_asc(ts1);
        printf ("timestamp: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL);
        PGTYPESinterval_copy(iv1, &iv2);
        text = PGTYPESinterval_to_asc(&iv2);
        printf ("interval: %s\n", text);
        PGTYPESinterval_free(iv1);
-       free(text);
+       PGTYPESchar_free(text);
 
        PGTYPESdate_mdyjul(mdy, &date2);
        printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]);
@@ -144,7 +144,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_fmt_asc(date1, fmt, out);
        printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
        printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
-       free(text);
+       PGTYPESchar_free(text);
        free(out);
 
        out = (char*) malloc(48);
@@ -164,7 +164,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc1: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mmmm. dd. yyyy";
@@ -172,7 +172,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc2: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "yy/mm/dd";
@@ -180,7 +180,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc3: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "yy/mm/dd";
@@ -188,7 +188,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc4: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "dd-mm-yy";
@@ -196,7 +196,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc5: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mmddyy";
@@ -204,7 +204,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc6: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mmm. dd. yyyy";
@@ -212,7 +212,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc7: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mmm. dd. yyyy";
@@ -220,7 +220,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc8: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mm yy   dd.";
@@ -228,7 +228,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc9: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "yyyy fierj mm   dd.";
@@ -236,7 +236,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc10: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mm/dd/yy";
@@ -244,28 +244,28 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc12: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        PGTYPEStimestamp_current(&ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        /* can't output this in regression mode */
        /* printf("timestamp_current: Now: %s\n", text); */
-       free(text);
+       PGTYPESchar_free(text);
 
        ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_to_asc1: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_to_asc2: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_to_asc3: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
 /*     abc-03:10:35-def-02/11/94-gh  */
 /*      12345678901234567890123456789 */
@@ -280,161 +280,161 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Jul 22 17:28:44 +0200 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Feb 29 17:28:44 +0200 2000";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Feb 29 17:28:44 +0200 1900";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Feb 29 17:28:44 +0200 1996";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%b %d %H:%M:%S %z %Y";
        in =  "      Jul 31 17:28:44 +0200 1996";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%b %d %H:%M:%S %z %Y";
        in =  "      Jul 32 17:28:44 +0200 1996";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Feb 29 17:28:44 +0200 1997";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%";
        in =  "Tue Jul 22 17:28:44 +0200 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "a %";
        in =  "Tue Jul 22 17:28:44 +0200 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%b, %d %H_%M`%S %z %Y";
        in =  "    Jul, 22 17_28 `44 +0200  2003  ";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %%%d %H:%M:%S %Z %Y";
        in =  "Tue Jul %22 17:28:44 CEST 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %%%d %H:%M:%S %Z %Y";
        in =  "Tue Jul %22 17:28:44 CEST 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "abc%n %C %B %%%d %H:%M:%S %Z %Y";
        in =  "abc\n   19 October %22 17:28:44 CEST 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "abc%n %C %B %%%d %H:%M:%S %Z %y";
        in =  "abc\n   18 October %34 17:28:44 CEST 80";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "";
        in =  "abc\n   18 October %34 17:28:44 CEST 80";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = NULL;
        in =  "1980-04-12 3:49:44      ";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, NULL) = %s, error: %d\n", in, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%B %d, %Y. Time: %I:%M%p";
        in =  "July 14, 1988. Time: 9:15am";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "September 6 at 01:30 pm in the year 1983";
        fmt = "%B %d at %I:%M %p in the year %Y";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "  1976, July 14. Time: 9:15am";
        fmt = "%Y,   %B %d. Time: %I:%M %p";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "  1976, July 14. Time: 9:15 am";
        fmt = "%Y,   %B %d. Time: %I:%M%p";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "  1976, P.M. July 14. Time: 9:15";
        fmt = "%Y, %P  %B %d. Time: %I:%M";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "1234567890";
        fmt = "%s";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        { ECPGtrans(__LINE__, NULL, "rollback");
 #line 365 "dt_test.pgc"
index 4024980f1edc2cb13161084f2dcec95e18e9ab1f..b3e1e7519dfa86dbc0866bd55fb0c76f218e6c2f 100644 (file)
@@ -110,14 +110,14 @@ main(void)
        text = PGTYPEStimestamp_to_asc(ts1);
 
        printf("timestamp: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = PGTYPESdate_from_timestamp(ts1);
        dc = PGTYPESdate_new();
        *dc = date1;
        text = PGTYPESdate_to_asc(*dc);
        printf("Date of timestamp: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESdate_free(dc);
 
        for (i = 0; dates[i]; i++)
@@ -132,7 +132,7 @@ main(void)
                                        i, err ? "-" : text,
                                        endptr ? 'N' : 'Y',
                                        err ? 'T' : 'F');
-               free(text);
+               PGTYPESchar_free(text);
                if (!err)
                {
                        for (j = 0; times[j]; j++)
@@ -147,7 +147,7 @@ main(void)
                                text = PGTYPEStimestamp_to_asc(ts1);
                                printf("TS[%d,%d]: %s\n",
                                       i, j, errno ? "-" : text);
-                               free(text);
+                               PGTYPESchar_free(text);
                                free(t);
                        }
                }
@@ -171,13 +171,13 @@ main(void)
                        continue;
                text = PGTYPESinterval_to_asc(i1);
                printf("interval[%d]: %s\n", i, text ? text : "-");
-               free(text);
+               PGTYPESchar_free(text);
 
                ic = PGTYPESinterval_new();
                PGTYPESinterval_copy(i1, ic);
                text = PGTYPESinterval_to_asc(i1);
                printf("interval_copy[%d]: %s\n", i, text ? text : "-");
-               free(text);
+               PGTYPESchar_free(text);
                PGTYPESinterval_free(ic);
                PGTYPESinterval_free(i1);
        }
index 47c320291f233af7bd8965bc5bafae15f666e416..1b1239eacad48354f9a857a94abc3c350a270fa9 100644 (file)
@@ -78,7 +78,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESnumeric_from_int(1407, value1);
        text = PGTYPESnumeric_to_asc(value1, -1);
        printf("from int = %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESnumeric_free(value1);
 
        value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
@@ -87,12 +87,12 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESnumeric_add(value1, value2, res);
        text = PGTYPESnumeric_to_asc(res, -1);
        printf("add = %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        PGTYPESnumeric_sub(res, value2, res);
        text = PGTYPESnumeric_to_asc(res, -1);
        printf("sub = %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESnumeric_free(value2);
 
        des = PGTYPESnumeric_new();
@@ -122,7 +122,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        PGTYPESnumeric_mul(res, des, res);
        text = PGTYPESnumeric_to_asc(res, -1);
        printf("mul = %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESnumeric_free(des);
 
        value2 = PGTYPESnumeric_from_asc("10000", NULL);
@@ -139,7 +139,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2);
        printf("to long(%d) = %ld %ld\n", i, l1, l2);
 
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESnumeric_free(value1);
        PGTYPESnumeric_free(value2);
        PGTYPESnumeric_free(res);
index d31834e2c039d0640decc400a5d6e2b729172bf5..aaab4ad7d70efaa18bd79f6acbfc6a6a6fcc42c0 100644 (file)
@@ -77,21 +77,21 @@ main(void)
 
                text = PGTYPESnumeric_to_asc(num, -1);
                if (!text) check_errno();
-               printf("num[%d,1]: %s\n", i, text); free(text);
+               printf("num[%d,1]: %s\n", i, text); PGTYPESchar_free(text);
                text = PGTYPESnumeric_to_asc(num, 0);
                if (!text) check_errno();
-               printf("num[%d,2]: %s\n", i, text); free(text);
+               printf("num[%d,2]: %s\n", i, text); PGTYPESchar_free(text);
                text = PGTYPESnumeric_to_asc(num, 1);
                if (!text) check_errno();
-               printf("num[%d,3]: %s\n", i, text); free(text);
+               printf("num[%d,3]: %s\n", i, text); PGTYPESchar_free(text);
                text = PGTYPESnumeric_to_asc(num, 2);
                if (!text) check_errno();
-               printf("num[%d,4]: %s\n", i, text); free(text);
+               printf("num[%d,4]: %s\n", i, text); PGTYPESchar_free(text);
 
                nin = PGTYPESnumeric_new();
                text = PGTYPESnumeric_to_asc(nin, 2);
                if (!text) check_errno();
-               printf("num[%d,5]: %s\n", i, text); free(text);
+               printf("num[%d,5]: %s\n", i, text); PGTYPESchar_free(text);
 
                r = PGTYPESnumeric_to_long(num, &l);
                if (r) check_errno();
@@ -103,7 +103,7 @@ main(void)
                        text = PGTYPESnumeric_to_asc(nin, 2);
                        q = PGTYPESnumeric_cmp(num, nin);
                        printf("num[%d,7]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-                       free(text);
+                       PGTYPESchar_free(text);
                }
 
                r = PGTYPESnumeric_to_int(num, &k);
@@ -116,7 +116,7 @@ main(void)
                        text = PGTYPESnumeric_to_asc(nin, 2);
                        q = PGTYPESnumeric_cmp(num, nin);
                        printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-                       free(text);
+                       PGTYPESchar_free(text);
                }
 
                if (i != 6)
@@ -147,7 +147,7 @@ main(void)
                        text = PGTYPESnumeric_to_asc(nin, 2);
                        q = PGTYPESnumeric_cmp(num, nin);
                        printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-                       free(text);
+                       PGTYPESchar_free(text);
                }
 
                PGTYPESdecimal_free(dec);
@@ -173,7 +173,7 @@ main(void)
                        {
                                text = PGTYPESnumeric_to_asc(a, 10);
                                printf("num[a,%d,%d]: %s\n", i, j, text);
-                               free(text);
+                               PGTYPESchar_free(text);
                        }
                        r = PGTYPESnumeric_sub(numarr[i], numarr[j], s);
                        if (r)
@@ -185,7 +185,7 @@ main(void)
                        {
                                text = PGTYPESnumeric_to_asc(s, 10);
                                printf("num[s,%d,%d]: %s\n", i, j, text);
-                               free(text);
+                               PGTYPESchar_free(text);
                        }
                        r = PGTYPESnumeric_mul(numarr[i], numarr[j], m);
                        if (r)
@@ -197,7 +197,7 @@ main(void)
                        {
                                text = PGTYPESnumeric_to_asc(m, 10);
                                printf("num[m,%d,%d]: %s\n", i, j, text);
-                               free(text);
+                               PGTYPESchar_free(text);
                        }
                        r = PGTYPESnumeric_div(numarr[i], numarr[j], d);
                        if (r)
@@ -209,7 +209,7 @@ main(void)
                        {
                                text = PGTYPESnumeric_to_asc(d, 10);
                                printf("num[d,%d,%d]: %s\n", i, j, text);
-                               free(text);
+                               PGTYPESchar_free(text);
                        }
 
                        PGTYPESnumeric_free(a);
@@ -223,7 +223,7 @@ main(void)
        {
                text = PGTYPESnumeric_to_asc(numarr[i], -1);
                printf("%d: %s\n", i, text);
-               free(text);
+               PGTYPESchar_free(text);
                PGTYPESnumeric_free(numarr[i]);
        }
        free(numarr);
index ef4dadaf9d20877de556b051c26450a10210ed62..b23107714c9d4c7db09fbea8f21df79a1bd0070e 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef PGTYPES_NUMERIC
 #define PGTYPES_NUMERIC
 
+#include <pgtypes.h>
+
 #define NUMERIC_POS                                            0x0000
 #define NUMERIC_NEG                                            0x4000
 #define NUMERIC_NAN                                            0xC000
index 090aaf1a45ddc3ce95d6beb8bf3a578ac9be0797..398dcedccf54961dd23d1a83623a6a58668cfe0c 100644 (file)
@@ -50,6 +50,8 @@ typedef struct sqlda_struct sqlda_t;
 #ifndef PGTYPES_NUMERIC
 #define PGTYPES_NUMERIC
 
+#include <pgtypes.h>
+
 #define NUMERIC_POS                                            0x0000
 #define NUMERIC_NEG                                            0x4000
 #define NUMERIC_NAN                                            0xC000
@@ -166,7 +168,7 @@ dump_sqlda(sqlda_t *sqlda)
 
                                val = PGTYPESnumeric_to_asc((numeric*)sqlda->sqlvar[i].sqldata, -1);
                                printf("name sqlda descriptor: '%s' value NUMERIC '%s'\n", sqlda->sqlvar[i].sqlname.data, val);
-                               free(val);
+                               PGTYPESchar_free(val);
                                break;
                        }
                }
index 1cc156c3dcd61a60237304f4219f5da4e1ddb0b0..95632fffeefe775115370bb0c64a68ff8d97ac4c 100644 (file)
@@ -39,18 +39,18 @@ main(void)
 
        text = PGTYPESdate_to_asc(date1);
        printf ("Date: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        text = PGTYPEStimestamp_to_asc(ts1);
        printf ("timestamp: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL);
        PGTYPESinterval_copy(iv1, &iv2);
        text = PGTYPESinterval_to_asc(&iv2);
        printf ("interval: %s\n", text);
        PGTYPESinterval_free(iv1);
-       free(text);
+       PGTYPESchar_free(text);
 
        PGTYPESdate_mdyjul(mdy, &date2);
        printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]);
@@ -70,7 +70,7 @@ main(void)
        PGTYPESdate_fmt_asc(date1, fmt, out);
        printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
        printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
-       free(text);
+       PGTYPESchar_free(text);
        free(out);
 
        out = (char*) malloc(48);
@@ -90,7 +90,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc1: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mmmm. dd. yyyy";
@@ -98,7 +98,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc2: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "yy/mm/dd";
@@ -106,7 +106,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc3: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "yy/mm/dd";
@@ -114,7 +114,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc4: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "dd-mm-yy";
@@ -122,7 +122,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc5: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mmddyy";
@@ -130,7 +130,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc6: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mmm. dd. yyyy";
@@ -138,7 +138,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc7: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mmm. dd. yyyy";
@@ -146,7 +146,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc8: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mm yy   dd.";
@@ -154,7 +154,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc9: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "yyyy fierj mm   dd.";
@@ -162,7 +162,7 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc10: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = 0;
        fmt = "mm/dd/yy";
@@ -170,28 +170,28 @@ main(void)
        PGTYPESdate_defmt_asc(&date1, fmt, in);
        text = PGTYPESdate_to_asc(date1);
        printf("date_defmt_asc12: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        PGTYPEStimestamp_current(&ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        /* can't output this in regression mode */
        /* printf("timestamp_current: Now: %s\n", text); */
-       free(text);
+       PGTYPESchar_free(text);
 
        ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_to_asc1: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_to_asc2: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_to_asc3: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
 /*     abc-03:10:35-def-02/11/94-gh  */
 /*      12345678901234567890123456789 */
@@ -206,161 +206,161 @@ main(void)
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Jul 22 17:28:44 +0200 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Feb 29 17:28:44 +0200 2000";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Feb 29 17:28:44 +0200 1900";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Feb 29 17:28:44 +0200 1996";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%b %d %H:%M:%S %z %Y";
        in =  "      Jul 31 17:28:44 +0200 1996";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%b %d %H:%M:%S %z %Y";
        in =  "      Jul 32 17:28:44 +0200 1996";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %d %H:%M:%S %z %Y";
        in =  "Tue Feb 29 17:28:44 +0200 1997";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%";
        in =  "Tue Jul 22 17:28:44 +0200 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "a %";
        in =  "Tue Jul 22 17:28:44 +0200 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%b, %d %H_%M`%S %z %Y";
        in =  "    Jul, 22 17_28 `44 +0200  2003  ";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %%%d %H:%M:%S %Z %Y";
        in =  "Tue Jul %22 17:28:44 CEST 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%a %b %%%d %H:%M:%S %Z %Y";
        in =  "Tue Jul %22 17:28:44 CEST 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "abc%n %C %B %%%d %H:%M:%S %Z %Y";
        in =  "abc\n   19 October %22 17:28:44 CEST 2003";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "abc%n %C %B %%%d %H:%M:%S %Z %y";
        in =  "abc\n   18 October %34 17:28:44 CEST 80";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "";
        in =  "abc\n   18 October %34 17:28:44 CEST 80";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = NULL;
        in =  "1980-04-12 3:49:44      ";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, NULL) = %s, error: %d\n", in, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        fmt = "%B %d, %Y. Time: %I:%M%p";
        in =  "July 14, 1988. Time: 9:15am";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "September 6 at 01:30 pm in the year 1983";
        fmt = "%B %d at %I:%M %p in the year %Y";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "  1976, July 14. Time: 9:15am";
        fmt = "%Y,   %B %d. Time: %I:%M %p";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "  1976, July 14. Time: 9:15 am";
        fmt = "%Y,   %B %d. Time: %I:%M%p";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "  1976, P.M. July 14. Time: 9:15";
        fmt = "%Y, %P  %B %d. Time: %I:%M";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        in = "1234567890";
        fmt = "%s";
        i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
        text = PGTYPEStimestamp_to_asc(ts1);
        printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-       free(text);
+       PGTYPESchar_free(text);
 
        exec sql rollback;
         exec sql disconnect;
index 9e1f432823fb659ed9a849e61d2de9b37d81ee43..62b934b07ee8b4e251ef14b4afad02a436d5c7da 100644 (file)
@@ -75,14 +75,14 @@ main(void)
        text = PGTYPEStimestamp_to_asc(ts1);
 
        printf("timestamp: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        date1 = PGTYPESdate_from_timestamp(ts1);
        dc = PGTYPESdate_new();
        *dc = date1;
        text = PGTYPESdate_to_asc(*dc);
        printf("Date of timestamp: %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESdate_free(dc);
 
        for (i = 0; dates[i]; i++)
@@ -97,7 +97,7 @@ main(void)
                                        i, err ? "-" : text,
                                        endptr ? 'N' : 'Y',
                                        err ? 'T' : 'F');
-               free(text);
+               PGTYPESchar_free(text);
                if (!err)
                {
                        for (j = 0; times[j]; j++)
@@ -112,7 +112,7 @@ main(void)
                                text = PGTYPEStimestamp_to_asc(ts1);
                                printf("TS[%d,%d]: %s\n",
                                       i, j, errno ? "-" : text);
-                               free(text);
+                               PGTYPESchar_free(text);
                                free(t);
                        }
                }
@@ -136,13 +136,13 @@ main(void)
                        continue;
                text = PGTYPESinterval_to_asc(i1);
                printf("interval[%d]: %s\n", i, text ? text : "-");
-               free(text);
+               PGTYPESchar_free(text);
 
                ic = PGTYPESinterval_new();
                PGTYPESinterval_copy(i1, ic);
                text = PGTYPESinterval_to_asc(i1);
                printf("interval_copy[%d]: %s\n", i, text ? text : "-");
-               free(text);
+               PGTYPESchar_free(text);
                PGTYPESinterval_free(ic);
                PGTYPESinterval_free(i1);
        }
index d276f70772bf78c239ae80a525a767191d563d63..98912704947acb69e5bd39cd0c0efe462ce007e9 100644 (file)
@@ -38,7 +38,7 @@ main(void)
        PGTYPESnumeric_from_int(1407, value1);
        text = PGTYPESnumeric_to_asc(value1, -1);
        printf("from int = %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESnumeric_free(value1);
 
        value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
@@ -47,12 +47,12 @@ main(void)
        PGTYPESnumeric_add(value1, value2, res);
        text = PGTYPESnumeric_to_asc(res, -1);
        printf("add = %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
 
        PGTYPESnumeric_sub(res, value2, res);
        text = PGTYPESnumeric_to_asc(res, -1);
        printf("sub = %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESnumeric_free(value2);
 
        des = PGTYPESnumeric_new();
@@ -68,7 +68,7 @@ main(void)
        PGTYPESnumeric_mul(res, des, res);
        text = PGTYPESnumeric_to_asc(res, -1);
        printf("mul = %s\n", text);
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESnumeric_free(des);
 
        value2 = PGTYPESnumeric_from_asc("10000", NULL);
@@ -85,7 +85,7 @@ main(void)
        i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2);
        printf("to long(%d) = %ld %ld\n", i, l1, l2);
 
-       free(text);
+       PGTYPESchar_free(text);
        PGTYPESnumeric_free(value1);
        PGTYPESnumeric_free(value2);
        PGTYPESnumeric_free(res);
index 16ca6a44a5e5f569e678c1ec14a8b5b0ead1c710..edc0c8c0578baae0959140cf2f434bad94b36404 100644 (file)
@@ -59,21 +59,21 @@ main(void)
 
                text = PGTYPESnumeric_to_asc(num, -1);
                if (!text) check_errno();
-               printf("num[%d,1]: %s\n", i, text); free(text);
+               printf("num[%d,1]: %s\n", i, text); PGTYPESchar_free(text);
                text = PGTYPESnumeric_to_asc(num, 0);
                if (!text) check_errno();
-               printf("num[%d,2]: %s\n", i, text); free(text);
+               printf("num[%d,2]: %s\n", i, text); PGTYPESchar_free(text);
                text = PGTYPESnumeric_to_asc(num, 1);
                if (!text) check_errno();
-               printf("num[%d,3]: %s\n", i, text); free(text);
+               printf("num[%d,3]: %s\n", i, text); PGTYPESchar_free(text);
                text = PGTYPESnumeric_to_asc(num, 2);
                if (!text) check_errno();
-               printf("num[%d,4]: %s\n", i, text); free(text);
+               printf("num[%d,4]: %s\n", i, text); PGTYPESchar_free(text);
 
                nin = PGTYPESnumeric_new();
                text = PGTYPESnumeric_to_asc(nin, 2);
                if (!text) check_errno();
-               printf("num[%d,5]: %s\n", i, text); free(text);
+               printf("num[%d,5]: %s\n", i, text); PGTYPESchar_free(text);
 
                r = PGTYPESnumeric_to_long(num, &l);
                if (r) check_errno();
@@ -85,7 +85,7 @@ main(void)
                        text = PGTYPESnumeric_to_asc(nin, 2);
                        q = PGTYPESnumeric_cmp(num, nin);
                        printf("num[%d,7]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-                       free(text);
+                       PGTYPESchar_free(text);
                }
 
                r = PGTYPESnumeric_to_int(num, &k);
@@ -98,7 +98,7 @@ main(void)
                        text = PGTYPESnumeric_to_asc(nin, 2);
                        q = PGTYPESnumeric_cmp(num, nin);
                        printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-                       free(text);
+                       PGTYPESchar_free(text);
                }
 
                if (i != 6)
@@ -129,7 +129,7 @@ main(void)
                        text = PGTYPESnumeric_to_asc(nin, 2);
                        q = PGTYPESnumeric_cmp(num, nin);
                        printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-                       free(text);
+                       PGTYPESchar_free(text);
                }
 
                PGTYPESdecimal_free(dec);
@@ -155,7 +155,7 @@ main(void)
                        {
                                text = PGTYPESnumeric_to_asc(a, 10);
                                printf("num[a,%d,%d]: %s\n", i, j, text);
-                               free(text);
+                               PGTYPESchar_free(text);
                        }
                        r = PGTYPESnumeric_sub(numarr[i], numarr[j], s);
                        if (r)
@@ -167,7 +167,7 @@ main(void)
                        {
                                text = PGTYPESnumeric_to_asc(s, 10);
                                printf("num[s,%d,%d]: %s\n", i, j, text);
-                               free(text);
+                               PGTYPESchar_free(text);
                        }
                        r = PGTYPESnumeric_mul(numarr[i], numarr[j], m);
                        if (r)
@@ -179,7 +179,7 @@ main(void)
                        {
                                text = PGTYPESnumeric_to_asc(m, 10);
                                printf("num[m,%d,%d]: %s\n", i, j, text);
-                               free(text);
+                               PGTYPESchar_free(text);
                        }
                        r = PGTYPESnumeric_div(numarr[i], numarr[j], d);
                        if (r)
@@ -191,7 +191,7 @@ main(void)
                        {
                                text = PGTYPESnumeric_to_asc(d, 10);
                                printf("num[d,%d,%d]: %s\n", i, j, text);
-                               free(text);
+                               PGTYPESchar_free(text);
                        }
 
                        PGTYPESnumeric_free(a);
@@ -205,7 +205,7 @@ main(void)
        {
                text = PGTYPESnumeric_to_asc(numarr[i], -1);
                printf("%d: %s\n", i, text);
-               free(text);
+               PGTYPESchar_free(text);
                PGTYPESnumeric_free(numarr[i]);
        }
        free(numarr);
index 2ea5121ac564fd48e9a4f74b69e82f555f8a3006..ec4d256b3903f28d2ac294499c8ef185fd01a2e8 100644 (file)
@@ -53,7 +53,7 @@ dump_sqlda(sqlda_t *sqlda)
 
                                val = PGTYPESnumeric_to_asc((numeric*)sqlda->sqlvar[i].sqldata, -1);
                                printf("name sqlda descriptor: '%s' value NUMERIC '%s'\n", sqlda->sqlvar[i].sqlname.data, val);
-                               free(val);
+                               PGTYPESchar_free(val);
                                break;
                        }
                }