]> granicus.if.org Git - postgresql/commitdiff
When creating a varchar struct name braces must be discarded.
authorMichael Meskes <meskes@postgresql.org>
Wed, 26 Nov 2008 13:19:34 +0000 (13:19 +0000)
committerMichael Meskes <meskes@postgresql.org>
Wed, 26 Nov 2008 13:19:34 +0000 (13:19 +0000)
src/interfaces/ecpg/preproc/type.c

index 7a81c349e02e100a2bdbb13943bc3c03bcfdf6a6..5d9f83a4fd1b06c31d5a3d43df93e5cf68975c10 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/type.c,v 1.77.2.1 2008/03/02 10:57:21 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/type.c,v 1.77.2.2 2008/11/26 13:19:34 meskes Exp $ */
 
 #include "postgres_fe.h"
 
@@ -327,8 +327,9 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
                fprintf(o, "\n\tECPGt_descriptor, %s, 0L, 0L, 0L, ", name);
        else
        {
-               char       *variable = (char *) mm_alloc(strlen(name) + ((prefix == NULL) ? 0 : strlen(prefix)) + 4);
-               char       *offset = (char *) mm_alloc(strlen(name) + strlen("sizeof(struct varchar_)") + 1 + strlen(varcharsize) + sizeof(int) * CHAR_BIT * 10 / 3);
+               char *variable = (char *) mm_alloc(strlen(name) + ((prefix == NULL) ? 0 : strlen(prefix)) + 4);
+               char *offset = (char *) mm_alloc(strlen(name) + strlen("sizeof(struct varchar_)") + 1 + strlen(varcharsize) + sizeof(int) * CHAR_BIT * 10 / 3);
+               char *var_name; 
 
                switch (type)
                {
@@ -350,10 +351,14 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
                                else
                                        sprintf(variable, "&(%s%s)", prefix ? prefix : "", name);
 
+                               /* remove trailing [] is name is array element */
+                               var_name = strdup(name);
+                               *(strchrnul(var_name, '[')) = '\0';
                                if (lineno)
-                                       sprintf(offset, "sizeof(struct varchar_%s_%d)", name, lineno);
+                                       sprintf(offset, "sizeof(struct varchar_%s_%d)", var_name, lineno);
                                else
-                                       sprintf(offset, "sizeof(struct varchar_%s)", name);
+                                       sprintf(offset, "sizeof(struct varchar_%s)", var_name);
+                               free(var_name);
                                break;
                        case ECPGt_char:
                        case ECPGt_unsigned_char: