1- /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/type.c,v 1.79 2008/05/16 15:20:04 petere Exp $ */
1+ /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/type.c,v 1.80 2008/11/26 13:18:22 meskes Exp $ */
22
33#include "postgres_fe.h"
44
@@ -327,8 +327,9 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
327327fprintf (o ,"\n\tECPGt_descriptor, %s, 0L, 0L, 0L, " ,name );
328328else
329329{
330- char * variable = (char * )mm_alloc (strlen (name )+ ((prefix == NULL ) ?0 :strlen (prefix ))+ 4 );
331- char * offset = (char * )mm_alloc (strlen (name )+ strlen ("sizeof(struct varchar_)" )+ 1 + strlen (varcharsize )+ sizeof (int )* CHAR_BIT * 10 /3 );
330+ char * variable = (char * )mm_alloc (strlen (name )+ ((prefix == NULL ) ?0 :strlen (prefix ))+ 4 );
331+ char * offset = (char * )mm_alloc (strlen (name )+ strlen ("sizeof(struct varchar_)" )+ 1 + strlen (varcharsize )+ sizeof (int )* CHAR_BIT * 10 /3 );
332+ char * var_name ;
332333
333334switch (type )
334335{
@@ -350,10 +351,14 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
350351else
351352sprintf (variable ,"&(%s%s)" ,prefix ?prefix :"" ,name );
352353
354+ /* remove trailing [] is name is array element */
355+ var_name = strdup (name );
356+ * (strchrnul (var_name ,'[' ))= '\0' ;
353357if (lineno )
354- sprintf (offset ,"sizeof(struct varchar_%s_%d)" ,name ,lineno );
358+ sprintf (offset ,"sizeof(struct varchar_%s_%d)" ,var_name ,lineno );
355359else
356- sprintf (offset ,"sizeof(struct varchar_%s)" ,name );
360+ sprintf (offset ,"sizeof(struct varchar_%s)" ,var_name );
361+ free (var_name );
357362break ;
358363case ECPGt_char :
359364case ECPGt_unsigned_char :