summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/ecpglib/descriptor.c
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2007-04-27 06:58:24 +0000
committerMichael Meskes <meskes@postgresql.org>2007-04-27 06:58:24 +0000
commit72e6a188132f7afe8ea75fd49b9dc67af4792ae1 (patch)
tree5d58ad1ad7094a026bdf92844250c98319d95b50 /src/interfaces/ecpg/ecpglib/descriptor.c
parentca27e5ec4cc7439969efcebfc1c2dc5389f272fa (diff)
Inlined two functions to get rid of va_list prolems on some archs.
Diffstat (limited to 'src/interfaces/ecpg/ecpglib/descriptor.c')
-rw-r--r--src/interfaces/ecpg/ecpglib/descriptor.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/interfaces/ecpg/ecpglib/descriptor.c b/src/interfaces/ecpg/ecpglib/descriptor.c
index 3fa684ad339..ae01ae92337 100644
--- a/src/interfaces/ecpg/ecpglib/descriptor.c
+++ b/src/interfaces/ecpg/ecpglib/descriptor.c
@@ -1,6 +1,6 @@
/* dynamic SQL support routines
*
- * $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.12.6.4 2006/07/05 10:50:06 meskes Exp $
+ * $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.12.6.5 2007/04/27 06:58:24 meskes Exp $
*/
#define POSTGRES_ECPG_INTERNAL
@@ -500,7 +500,6 @@ ECPGset_desc(int lineno, const char *desc_name, int index,...)
do
{
enum ECPGdtype itemtype;
- enum ECPGttype type;
const char *tobeinserted = NULL;
bool malloced;
@@ -509,13 +508,29 @@ ECPGset_desc(int lineno, const char *desc_name, int index,...)
if (itemtype == ECPGd_EODT)
break;
- type = va_arg(args, enum ECPGttype);
-#if defined(__GNUC__) && (defined (__powerpc__) || defined(__amd64__) || defined(__x86_64__))
- ECPGget_variable(args, type, var, false);
-#else
- ECPGget_variable(&args, type, var, false);
-#endif
+ var->type = va_arg(args, enum ECPGttype);
+ var->pointer = va_arg(args, char *);
+ var->varcharsize = va_arg(args, long);
+ var->arrsize = va_arg(args, long);
+ var->offset = va_arg(args, long);
+
+ if (var->arrsize == 0 || var->varcharsize == 0)
+ var->value = *((char **) (var->pointer));
+ else
+ var->value = var->pointer;
+
+ /*
+ * negative values are used to indicate an array without given bounds
+ */
+ /* reset to zero for us */
+ if (var->arrsize < 0)
+ var->arrsize = 0;
+ if (var->varcharsize < 0)
+ var->varcharsize = 0;
+
+ var->next = NULL;
+
switch (itemtype)
{
case ECPGd_data: