aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/ecpglib/descriptor.c
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2007-04-27 06:58:17 +0000
committerMichael Meskes <meskes@postgresql.org>2007-04-27 06:58:17 +0000
commit1b87b4474feed55fa514cd9385d94cc49c10dbcc (patch)
tree92f98a48213e2597b74fa7311fe290bfe6e86607 /src/interfaces/ecpg/ecpglib/descriptor.c
parentb26329654e15e93278c809c906221d6f364f9b63 (diff)
downloadpostgresql-1b87b4474feed55fa514cd9385d94cc49c10dbcc.tar.gz
postgresql-1b87b4474feed55fa514cd9385d94cc49c10dbcc.zip
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 d73b7d6e80e..1b1a5e3f7e7 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.20 2006/10/04 00:30:11 momjian Exp $
+ * $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.20.2.1 2007/04/27 06:58:17 meskes Exp $
*/
#define POSTGRES_ECPG_INTERNAL
@@ -507,7 +507,6 @@ ECPGset_desc(int lineno, const char *desc_name, int index,...)
do
{
enum ECPGdtype itemtype;
- enum ECPGttype type;
const char *tobeinserted = NULL;
bool malloced;
@@ -516,13 +515,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: