Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit833a2b5

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

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
@@ -840,7 +840,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initialize
840840
struct ECPGtype * type;
841841
char *dimension = $3.index1; /* dimension of array */
842842
char *length = $3.index2; /* length of string */
843-
chardim[14L];
843+
char*dim_str;
844844
char *vcn;
845845

846846
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);
@@ -864,9 +864,9 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initialize
864864
type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, varchar_counter), dimension);
865865

866866
if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1)
867-
*dim = '\0';
867+
dim_str=make_str("");
868868
else
869-
sprintf(dim, "[%s]",dimension);
869+
dim_str=cat_str(3, make_str("["), mm_strdup(dimension), make_str("]"));
870870
/* cannot check for atoi <= 0 because a defined constant will yield 0 here as well */
871871
if (atoi(length) < 0 || strcmp(length, "0") == 0)
872872
mmerror(PARSE_ERROR, ET_ERROR, "pointers to varchar are not implemented");
@@ -877,7 +877,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initialize
877877
if (strcmp(dimension, "0") == 0)
878878
$$ = 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);
879879
else
880-
$$ = 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);
880+
$$ = 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);
881881
varchar_counter++;
882882
break;
883883

‎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
intr ;
115115

116116
#line 45 "array_of_struct.pgc"
117-
structvarchar_onlyname_5 {intlen;chararr[50 ]; }onlyname [2] ;
117+
structvarchar_onlyname_5 {intlen;chararr[50 ]; }onlyname [2] ;
118118
/* exec sql end declare section */
119119
#line 46 "array_of_struct.pgc"
120120

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp