]> 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>
Tue, 26 Jun 2018 07:49:52 +0000 (19:49 +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 741d6d38159cb9357726ac7adbb61e895b2dfe31..765a7b6f74d3a1124b29ec14e7b251487326ce86 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>
@@ -2416,9 +2429,10 @@ date PGTYPESdate_from_asc(char *str, char **endptr);
 <synopsis>
 char *PGTYPESdate_to_asc(date dDate);
 </synopsis>
-        The function receives the date <literal>dDate</> as its only parameter.
-        It will output the date in the form <literal>1999-01-18</>, i.e., in the
-        <literal>YYYY-MM-DD</> format.
+        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</> 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</>
         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 3d1a181b2b70c4f88665c3f570c173ae309f0950..5042633fdc160dcc186c45f3548db578661321dd 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 283ecca25eb37dece4e3f08d07accfa652881b80..9c277aa05afaa89dd66b69b146641d74cf3a7c29 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 fd29e30a3bbb3be6ed49150672f0c39781a2a700..7adca66618d8d9dc8c2cea90a922acc045f89cd1 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 00d43915b2dfee55e9d5bb024ccde7b0cdf8595f..e7953b3131a2daadec4aff4db8cd6ad21c92d38e 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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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 b6e77562b2434f9226b744c27dbdd646c7d61ecf..6dd379d333f6a1ee73cff399eab9a6a337afbe41 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 8019a8f63e78cf128d12bd7136a5df997a5eb968..6dad1dc4e4d117e2db4aa6610a0a6cbda398d6b0 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 83636ad880016b8c3768d39a0b77aaeef4dd08ad..d47997c3c91e079cdfb29c01a62780ac78296a63 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 b9522a76abb81d05a7d076280f3a98d44d808a94..65bafcdb83642e847bfe164242987e02ef9aa237 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 96386e8989412b0aa2ba9a8d36927e4ad36baa01..6e6f5e434d25f2dc2dbc776c2df29c5f04f4540b 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 768cbd5e6f1f3b021c13b6a9c8aa93ca4c7519b7..6cc2983c3bcfffbb766dff9c1b797d3915b3419b 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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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; text = "";
        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 d519305e1881224db039dc0c6e4098bdc6dd82ce..1955a873f1c81487e9a71b967b1163159f5b1868 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 a024c8702fb7ec3ffaad77210135b6eccb42e4a5..0b5de558eba46293a6d66dbe6b6b18a59866898d 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 2ac666f7c02153c921d7b3c8a893a0a755531b52..adcc8b9140fe0e1275ae616d3ea50cc1f0833900 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 67f14d6ccb85d7d28a1852edfdc6fee9fbfaea04..8e3feaeb1942e54f40071973f6abf8120e531219 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;
                        }
                }