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

Commit1b2b96c

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

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-
chardim[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
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