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 $ */
2
2
3
3
#include "postgres_fe.h"
4
4
@@ -327,8 +327,9 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
327
327
fprintf (o ,"\n\tECPGt_descriptor, %s, 0L, 0L, 0L, " ,name );
328
328
else
329
329
{
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 ;
332
333
333
334
switch (type )
334
335
{
@@ -350,10 +351,14 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
350
351
else
351
352
sprintf (variable ,"&(%s%s)" ,prefix ?prefix :"" ,name );
352
353
354
+ /* remove trailing [] is name is array element */
355
+ var_name = strdup (name );
356
+ * (strchrnul (var_name ,'[' ))= '\0' ;
353
357
if (lineno )
354
- sprintf (offset ,"sizeof(struct varchar_%s_%d)" ,name ,lineno );
358
+ sprintf (offset ,"sizeof(struct varchar_%s_%d)" ,var_name ,lineno );
355
359
else
356
- sprintf (offset ,"sizeof(struct varchar_%s)" ,name );
360
+ sprintf (offset ,"sizeof(struct varchar_%s)" ,var_name );
361
+ free (var_name );
357
362
break ;
358
363
case ECPGt_char :
359
364
case ECPGt_unsigned_char :