Skip to content

Commit 1b2b96c

Browse files
author
Michael Meskes
committed
In ecpg's parser removed a fixed length limit for constants defining an array dimension.
1 parent e445f9f commit 1b2b96c

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

src/interfaces/ecpg/preproc/ecpg.trailer

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initialize
839839
struct ECPGtype * type;
840840
char *dimension = $3.index1; /* dimension of array */
841841
char *length = $3.index2; /* length of string */
842-
char dim[14L];
842+
char *dim_str;
843843
char *vcn;
844844

845845
adjust_array(actual_type[struct_level].type_enum, &dimension, &length, actual_type[struct_level].type_dimension, actual_type[struct_level].type_index, strlen($1), false);
@@ -863,9 +863,9 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initialize
863863
type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, varchar_counter), dimension);
864864

865865
if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1)
866-
*dim = '\0';
866+
dim_str=make_str("");
867867
else
868-
sprintf(dim, "[%s]", dimension);
868+
dim_str=cat_str(3, make_str("["), mm_strdup(dimension), make_str("]"));
869869
/* cannot check for atoi <= 0 because a defined constant will yield 0 here as well */
870870
if (atoi(length) < 0 || strcmp(length, "0") == 0)
871871
mmerror(PARSE_ERROR, ET_ERROR, "pointers to varchar are not implemented");
@@ -876,7 +876,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initialize
876876
if (strcmp(dimension, "0") == 0)
877877
$$ = cat_str(7, make2_str(make_str(" struct varchar_"), vcn), make_str(" { int len; char arr["), mm_strdup(length), make_str("]; } *"), mm_strdup($2), $4, $5);
878878
else
879-
$$ = cat_str(8, make2_str(make_str(" struct varchar_"), vcn), make_str(" { int len; char arr["), mm_strdup(length), make_str("]; } "), mm_strdup($2), mm_strdup(dim), $4, $5);
879+
$$ = cat_str(8, make2_str(make_str(" struct varchar_"), vcn), make_str(" { int len; char arr["), mm_strdup(length), make_str("]; } "), mm_strdup($2), dim_str, $4, $5);
880880
varchar_counter++;
881881
break;
882882

src/interfaces/ecpg/test/expected/preproc-array_of_struct.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ int main()
114114
int r ;
115115

116116
#line 45 "array_of_struct.pgc"
117-
struct varchar_onlyname_5 { int len; char arr[ 50 ]; } onlyname [2] ;
117+
struct varchar_onlyname_5 { int len; char arr[ 50 ]; } onlyname [ 2 ] ;
118118
/* exec sql end declare section */
119119
#line 46 "array_of_struct.pgc"
120120

0 commit comments

Comments
 (0)