Cleaned up va_list handling. Hopefully this now works on all archs.
authorMichael Meskes
Fri, 2 Feb 2007 08:58:23 +0000 (08:58 +0000)
committerMichael Meskes
Fri, 2 Feb 2007 08:58:23 +0000 (08:58 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/ecpglib/execute.c

index 7a2ca2470021ec975d34aaf16dddbafc604da37f..5bb0fafeac713f3522f7cfada4a460bfc52d1b1a 100644 (file)
@@ -2160,5 +2160,9 @@ Th 25. Jan 17:17:01 CET 2007
 
    - Removed compiler warning due to unneeded unsigned declaration.
    - Removed regression test that triggers those libc precision bugs on some archs.
+
+Fr 2. Feb 09:53:48 CET 2007
+
+   - Cleaned up va_list handling. Hopefully this now works on all archs.
    - Set ecpg library version to 5.3.
    - Set ecpg version to 4.3.1.
index 15edddcea21ff830b5eb32ec24031dbe54778380..2331250bba3349db1548d1f128290bfae8ac013b 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.62 2006/10/04 00:30:11 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.63 2007/02/02 08:58:23 meskes Exp $ */
 
 /*
  * The aim is to get a simpler inteface to the database routines.
@@ -135,8 +135,6 @@ ECPGget_variable(va_list APREF, enum ECPGttype type, struct variable * var, bool
    }
 }
 
-#undef APREF
-
 /*
  * create a list of variables
  * The variables are listed with input variables preceding outputvariables
@@ -156,7 +154,7 @@ ECPGget_variable(va_list APREF, enum ECPGttype type, struct variable * var, bool
  * ind_offset - indicator offset
  */
 static bool
-create_statement(int lineno, int compat, int force_indicator, struct connection * connection, struct statement ** stmt, const char *query, va_list ap)
+create_statement(int lineno, int compat, int force_indicator, struct connection * connection, struct statement ** stmt, const char *query, va_list APREF)
 {
    struct variable **list = &((*stmt)->inlist);
    enum ECPGttype type;
@@ -172,7 +170,7 @@ create_statement(int lineno, int compat, int force_indicator, struct connection
 
    list = &((*stmt)->inlist);
 
-   type = va_arg(ap, enum ECPGttype);
+   type = va_arg(APREF, enum ECPGttype);
 
    while (type != ECPGt_EORT)
    {
@@ -186,11 +184,7 @@ create_statement(int lineno, int compat, int force_indicator, struct connection
            if (!(var = (struct variable *) ECPGalloc(sizeof(struct variable), lineno)))
                return false;
 
-#if defined(__GNUC__) && (defined (__powerpc__) || defined(__amd64__) || defined(__x86_64__))
            ECPGget_variable(ap, type, var, true);
-#else
-           ECPGget_variable(&ap, type, var, true);
-#endif
 
            /* if variable is NULL, the statement hasn't been prepared */
            if (var->pointer == NULL)
@@ -208,7 +202,7 @@ create_statement(int lineno, int compat, int force_indicator, struct connection
                ptr->next = var;
        }
 
-       type = va_arg(ap, enum ECPGttype);
+       type = va_arg(APREF, enum ECPGttype);
    }
 
    return (true);
@@ -1545,7 +1539,11 @@ ECPGdo(int lineno, int compat, int force_indicator, const char *connection_name,
 
    /* construct statement in our own structure */
    va_start(args, query);
+#if defined(__GNUC__) && (defined (__powerpc__) || defined(__amd64__) || defined(__x86_64__))
    if (create_statement(lineno, compat, force_indicator, con, &stmt, query, args) == false)
+#else
+   if (create_statement(lineno, compat, force_indicator, con, &stmt, query, &args) == false)
+#endif
    {
        setlocale(LC_NUMERIC, oldlocale);
        ECPGfree(oldlocale);