1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-21 16:02:15 +03:00

There is no need to have to identical functions in ecpg thus removing one of them.

This commit is contained in:
Michael Meskes
2011-01-09 02:45:56 +01:00
parent fdf2dbda3f
commit 1066dbfb85
8 changed files with 369 additions and 379 deletions

View File

@ -188,7 +188,7 @@ output_get_descr(char *desc_name, char *index)
break; break;
} }
fprintf(yyout, "%s,", get_dtype(results->value)); fprintf(yyout, "%s,", get_dtype(results->value));
ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, make_str("0"), NULL, NULL); ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, mm_strdup("0"), NULL, NULL);
} }
drop_assignments(); drop_assignments();
fputs("ECPGd_EODT);\n", yyout); fputs("ECPGd_EODT);\n", yyout);
@ -293,7 +293,7 @@ output_set_descr(char *desc_name, char *index)
case ECPGd_length: case ECPGd_length:
case ECPGd_type: case ECPGd_type:
fprintf(yyout, "%s,", get_dtype(results->value)); fprintf(yyout, "%s,", get_dtype(results->value));
ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, make_str("0"), NULL, NULL); ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, mm_strdup("0"), NULL, NULL);
break; break;
default: default:

View File

@ -41,7 +41,7 @@ ECPG: stmtPrepareStmt block
if ($1.type == NULL || strlen($1.type) == 0) if ($1.type == NULL || strlen($1.type) == 0)
output_prepare_statement($1.name, $1.stmt); output_prepare_statement($1.name, $1.stmt);
else else
output_statement(cat_str(5, make_str("prepare"), $1.name, $1.type, make_str("as"), $1.stmt), 0, ECPGst_normal); output_statement(cat_str(5, mm_strdup("prepare"), $1.name, $1.type, mm_strdup("as"), $1.stmt), 0, ECPGst_normal);
} }
ECPG: stmtTransactionStmt block ECPG: stmtTransactionStmt block
{ {
@ -212,21 +212,21 @@ ECPG: var_valueNumericOnly addon
if ($1[0] == '$') if ($1[0] == '$')
{ {
free($1); free($1);
$1 = make_str("$0"); $1 = mm_strdup("$0");
} }
ECPG: fetch_argscursor_name addon ECPG: fetch_argscursor_name addon
add_additional_variables($1, false); add_additional_variables($1, false);
if ($1[0] == ':') if ($1[0] == ':')
{ {
free($1); free($1);
$1 = make_str("$0"); $1 = mm_strdup("$0");
} }
ECPG: fetch_argsfrom_incursor_name addon ECPG: fetch_argsfrom_incursor_name addon
add_additional_variables($2, false); add_additional_variables($2, false);
if ($2[0] == ':') if ($2[0] == ':')
{ {
free($2); free($2);
$2 = make_str("$0"); $2 = mm_strdup("$0");
} }
ECPG: fetch_argsNEXTopt_from_incursor_name addon ECPG: fetch_argsNEXTopt_from_incursor_name addon
ECPG: fetch_argsPRIORopt_from_incursor_name addon ECPG: fetch_argsPRIORopt_from_incursor_name addon
@ -237,19 +237,19 @@ ECPG: fetch_argsALLopt_from_incursor_name addon
if ($3[0] == ':') if ($3[0] == ':')
{ {
free($3); free($3);
$3 = make_str("$0"); $3 = mm_strdup("$0");
} }
ECPG: fetch_argsSignedIconstopt_from_incursor_name addon ECPG: fetch_argsSignedIconstopt_from_incursor_name addon
add_additional_variables($3, false); add_additional_variables($3, false);
if ($3[0] == ':') if ($3[0] == ':')
{ {
free($3); free($3);
$3 = make_str("$0"); $3 = mm_strdup("$0");
} }
if ($1[0] == '$') if ($1[0] == '$')
{ {
free($1); free($1);
$1 = make_str("$0"); $1 = mm_strdup("$0");
} }
ECPG: fetch_argsFORWARDALLopt_from_incursor_name addon ECPG: fetch_argsFORWARDALLopt_from_incursor_name addon
ECPG: fetch_argsBACKWARDALLopt_from_incursor_name addon ECPG: fetch_argsBACKWARDALLopt_from_incursor_name addon
@ -257,7 +257,7 @@ ECPG: fetch_argsBACKWARDALLopt_from_incursor_name addon
if ($4[0] == ':') if ($4[0] == ':')
{ {
free($4); free($4);
$4 = make_str("$0"); $4 = mm_strdup("$0");
} }
ECPG: fetch_argsABSOLUTE_PSignedIconstopt_from_incursor_name addon ECPG: fetch_argsABSOLUTE_PSignedIconstopt_from_incursor_name addon
ECPG: fetch_argsRELATIVE_PSignedIconstopt_from_incursor_name addon ECPG: fetch_argsRELATIVE_PSignedIconstopt_from_incursor_name addon
@ -267,12 +267,12 @@ ECPG: fetch_argsBACKWARDSignedIconstopt_from_incursor_name addon
if ($4[0] == ':') if ($4[0] == ':')
{ {
free($4); free($4);
$4 = make_str("$0"); $4 = mm_strdup("$0");
} }
if ($2[0] == '$') if ($2[0] == '$')
{ {
free($2); free($2);
$2 = make_str("$0"); $2 = mm_strdup("$0");
} }
ECPG: cursor_namename rule ECPG: cursor_namename rule
| char_civar | char_civar
@ -287,7 +287,7 @@ ECPG: PrepareStmtPREPAREprepared_nameprep_type_clauseASPreparableStmt block
{ {
$$.name = $2; $$.name = $2;
$$.type = $3; $$.type = $3;
$$.stmt = cat_str(3, make_str("\""), $5, make_str("\"")); $$.stmt = cat_str(3, mm_strdup("\""), $5, mm_strdup("\""));
} }
| PREPARE prepared_name FROM execstring | PREPARE prepared_name FROM execstring
{ {
@ -300,7 +300,7 @@ ECPG: ExecuteStmtEXECUTEprepared_nameexecute_param_clauseexecute_rest block
ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectStmt block ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectStmt block
{ {
struct cursor *ptr, *this; struct cursor *ptr, *this;
char *cursor_marker = $2[0] == ':' ? make_str("$0") : mm_strdup($2); char *cursor_marker = $2[0] == ':' ? mm_strdup("$0") : mm_strdup($2);
char *comment, *c1, *c2; char *comment, *c1, *c2;
int (* strcmp_fn)(const char *, const char *) = ($2[0] == ':' ? strcmp : pg_strcasecmp); int (* strcmp_fn)(const char *, const char *) = ($2[0] == ':' ? strcmp : pg_strcasecmp);
@ -322,7 +322,7 @@ ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectSt
this->function = (current_function ? mm_strdup(current_function) : NULL); this->function = (current_function ? mm_strdup(current_function) : NULL);
this->connection = connection; this->connection = connection;
this->opened = false; this->opened = false;
this->command = cat_str(7, make_str("declare"), cursor_marker, $3, make_str("cursor"), $5, make_str("for"), $7); this->command = cat_str(7, mm_strdup("declare"), cursor_marker, $3, mm_strdup("cursor"), $5, mm_strdup("for"), $7);
this->argsinsert = argsinsert; this->argsinsert = argsinsert;
this->argsinsert_oos = NULL; this->argsinsert_oos = NULL;
this->argsresult = argsresult; this->argsresult = argsresult;
@ -337,31 +337,31 @@ ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectSt
c2[0] = '.'; c2[0] = '.';
c2[1] = '.'; c2[1] = '.';
} }
comment = cat_str(3, make_str("/*"), c1, make_str("*/")); comment = cat_str(3, mm_strdup("/*"), c1, mm_strdup("*/"));
if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */ if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */
$$ = cat_str(3, adjust_outofscope_cursor_vars(this), $$ = cat_str(3, adjust_outofscope_cursor_vars(this),
make_str("ECPG_informix_reset_sqlca();"), mm_strdup("ECPG_informix_reset_sqlca();"),
comment); comment);
else else
$$ = cat2_str(adjust_outofscope_cursor_vars(this), comment); $$ = cat2_str(adjust_outofscope_cursor_vars(this), comment);
} }
ECPG: ClosePortalStmtCLOSEcursor_name block ECPG: ClosePortalStmtCLOSEcursor_name block
{ {
char *cursor_marker = $2[0] == ':' ? make_str("$0") : $2; char *cursor_marker = $2[0] == ':' ? mm_strdup("$0") : $2;
$$ = cat2_str(make_str("close"), cursor_marker); $$ = cat2_str(mm_strdup("close"), cursor_marker);
} }
ECPG: opt_hold block ECPG: opt_hold block
{ {
if (compat == ECPG_COMPAT_INFORMIX_SE && autocommit) if (compat == ECPG_COMPAT_INFORMIX_SE && autocommit)
$$ = make_str("with hold"); $$ = mm_strdup("with hold");
else else
$$ = EMPTY; $$ = EMPTY;
} }
ECPG: into_clauseINTOOptTempTableName block ECPG: into_clauseINTOOptTempTableName block
{ {
FoundInto = 1; FoundInto = 1;
$$= cat2_str(make_str("into"), $2); $$= cat2_str(mm_strdup("into"), $2);
} }
| ecpg_into { $$ = EMPTY; } | ecpg_into { $$ = EMPTY; }
ECPG: table_refselect_with_parens addon ECPG: table_refselect_with_parens addon
@ -369,16 +369,16 @@ ECPG: table_refselect_with_parens addon
ECPG: TypenameSimpleTypenameopt_array_bounds block ECPG: TypenameSimpleTypenameopt_array_bounds block
{ $$ = cat2_str($1, $2.str); } { $$ = cat2_str($1, $2.str); }
ECPG: TypenameSETOFSimpleTypenameopt_array_bounds block ECPG: TypenameSETOFSimpleTypenameopt_array_bounds block
{ $$ = cat_str(3, make_str("setof"), $2, $3.str); } { $$ = cat_str(3, mm_strdup("setof"), $2, $3.str); }
ECPG: opt_array_boundsopt_array_bounds'['']' block ECPG: opt_array_boundsopt_array_bounds'['']' block
{ {
$$.index1 = $1.index1; $$.index1 = $1.index1;
$$.index2 = $1.index2; $$.index2 = $1.index2;
if (strcmp($$.index1, "-1") == 0) if (strcmp($$.index1, "-1") == 0)
$$.index1 = make_str("0"); $$.index1 = mm_strdup("0");
else if (strcmp($1.index2, "-1") == 0) else if (strcmp($1.index2, "-1") == 0)
$$.index2 = make_str("0"); $$.index2 = mm_strdup("0");
$$.str = cat_str(2, $1.str, make_str("[]")); $$.str = cat_str(2, $1.str, mm_strdup("[]"));
} }
| opt_array_bounds '[' Iresult ']' | opt_array_bounds '[' Iresult ']'
{ {
@ -388,12 +388,12 @@ ECPG: opt_array_boundsopt_array_bounds'['']' block
$$.index1 = strdup($3); $$.index1 = strdup($3);
else if (strcmp($1.index2, "-1") == 0) else if (strcmp($1.index2, "-1") == 0)
$$.index2 = strdup($3); $$.index2 = strdup($3);
$$.str = cat_str(4, $1.str, make_str("["), $3, make_str("]")); $$.str = cat_str(4, $1.str, mm_strdup("["), $3, mm_strdup("]"));
} }
ECPG: opt_array_bounds ECPG: opt_array_bounds
{ {
$$.index1 = make_str("-1"); $$.index1 = mm_strdup("-1");
$$.index2 = make_str("-1"); $$.index2 = mm_strdup("-1");
$$.str= EMPTY; $$.str= EMPTY;
} }
ECPG: IconstICONST block ECPG: IconstICONST block
@ -404,8 +404,8 @@ ECPG: AexprConstNULL_P rule
ECPG: ColIdcol_name_keyword rule ECPG: ColIdcol_name_keyword rule
| ECPGKeywords { $$ = $1; } | ECPGKeywords { $$ = $1; }
| ECPGCKeywords { $$ = $1; } | ECPGCKeywords { $$ = $1; }
| CHAR_P { $$ = make_str("char"); } | CHAR_P { $$ = mm_strdup("char"); }
| VALUES { $$ = make_str("values"); } | VALUES { $$ = mm_strdup("values"); }
ECPG: type_function_nametype_func_name_keyword rule ECPG: type_function_nametype_func_name_keyword rule
| ECPGKeywords { $$ = $1; } | ECPGKeywords { $$ = $1; }
| ECPGTypeName { $$ = $1; } | ECPGTypeName { $$ = $1; }
@ -418,60 +418,60 @@ ECPG: VariableShowStmtSHOWALL block
ECPG: FetchStmtMOVEfetch_args rule ECPG: FetchStmtMOVEfetch_args rule
| FETCH fetch_args ecpg_fetch_into | FETCH fetch_args ecpg_fetch_into
{ {
$$ = cat2_str(make_str("fetch"), $2); $$ = cat2_str(mm_strdup("fetch"), $2);
} }
| FETCH FORWARD cursor_name opt_ecpg_fetch_into | FETCH FORWARD cursor_name opt_ecpg_fetch_into
{ {
char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3; char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3;
add_additional_variables($3, false); add_additional_variables($3, false);
$$ = cat_str(2, make_str("fetch forward"), cursor_marker); $$ = cat_str(2, mm_strdup("fetch forward"), cursor_marker);
} }
| FETCH FORWARD from_in cursor_name opt_ecpg_fetch_into | FETCH FORWARD from_in cursor_name opt_ecpg_fetch_into
{ {
char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4; char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4;
add_additional_variables($4, false); add_additional_variables($4, false);
$$ = cat_str(2, make_str("fetch forward from"), cursor_marker); $$ = cat_str(2, mm_strdup("fetch forward from"), cursor_marker);
} }
| FETCH BACKWARD cursor_name opt_ecpg_fetch_into | FETCH BACKWARD cursor_name opt_ecpg_fetch_into
{ {
char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3; char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3;
add_additional_variables($3, false); add_additional_variables($3, false);
$$ = cat_str(2, make_str("fetch backward"), cursor_marker); $$ = cat_str(2, mm_strdup("fetch backward"), cursor_marker);
} }
| FETCH BACKWARD from_in cursor_name opt_ecpg_fetch_into | FETCH BACKWARD from_in cursor_name opt_ecpg_fetch_into
{ {
char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4; char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4;
add_additional_variables($4, false); add_additional_variables($4, false);
$$ = cat_str(2, make_str("fetch backward from"), cursor_marker); $$ = cat_str(2, mm_strdup("fetch backward from"), cursor_marker);
} }
| MOVE FORWARD cursor_name | MOVE FORWARD cursor_name
{ {
char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3; char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3;
add_additional_variables($3, false); add_additional_variables($3, false);
$$ = cat_str(2, make_str("move forward"), cursor_marker); $$ = cat_str(2, mm_strdup("move forward"), cursor_marker);
} }
| MOVE FORWARD from_in cursor_name | MOVE FORWARD from_in cursor_name
{ {
char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4; char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4;
add_additional_variables($4, false); add_additional_variables($4, false);
$$ = cat_str(2, make_str("move forward from"), cursor_marker); $$ = cat_str(2, mm_strdup("move forward from"), cursor_marker);
} }
| MOVE BACKWARD cursor_name | MOVE BACKWARD cursor_name
{ {
char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3; char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3;
add_additional_variables($3, false); add_additional_variables($3, false);
$$ = cat_str(2, make_str("move backward"), cursor_marker); $$ = cat_str(2, mm_strdup("move backward"), cursor_marker);
} }
| MOVE BACKWARD from_in cursor_name | MOVE BACKWARD from_in cursor_name
{ {
char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4; char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4;
add_additional_variables($4, false); add_additional_variables($4, false);
$$ = cat_str(2, make_str("move backward from"), cursor_marker); $$ = cat_str(2, mm_strdup("move backward from"), cursor_marker);
} }
ECPG: limit_clauseLIMITselect_limit_value','select_offset_value block ECPG: limit_clauseLIMITselect_limit_value','select_offset_value block
{ {
mmerror(PARSE_ERROR, ET_WARNING, "no longer supported LIMIT #,# syntax passed to server"); mmerror(PARSE_ERROR, ET_WARNING, "no longer supported LIMIT #,# syntax passed to server");
$$ = cat_str(4, make_str("limit"), $2, make_str(","), $4); $$ = cat_str(4, mm_strdup("limit"), $2, mm_strdup(","), $4);
} }
ECPG: SignedIconstIconst rule ECPG: SignedIconstIconst rule
| civar { $$ = $1; } | civar { $$ = $1; }

View File

@ -148,15 +148,6 @@ cat_str(int count, ...)
return(res_str); return(res_str);
} }
char *
make_str(const char *str)
{
char * res_str = (char *)mm_alloc(strlen(str) + 1);
strcpy(res_str, str);
return res_str;
}
static char * static char *
make2_str(char *str1, char *str2) make2_str(char *str1, char *str2)
{ {
@ -219,7 +210,7 @@ create_questionmarks(char *name, bool array)
for (; count > 0; count --) for (; count > 0; count --)
{ {
sprintf(pacounter_buffer, "$%d", pacounter++); sprintf(pacounter_buffer, "$%d", pacounter++);
result = cat_str(3, result, mm_strdup(pacounter_buffer), make_str(" , ")); result = cat_str(3, result, mm_strdup(pacounter_buffer), mm_strdup(" , "));
} }
/* removed the trailing " ," */ /* removed the trailing " ," */
@ -242,7 +233,7 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
* instead of the variable. Do it only for local variables, not for globals. * instead of the variable. Do it only for local variables, not for globals.
*/ */
char *result = make_str(""); char *result = mm_strdup("");
int insert; int insert;
for (insert = 1; insert >= 0; insert--) for (insert = 1; insert >= 0; insert--)
@ -277,12 +268,12 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
} }
else if ((ptr->variable->type->type != ECPGt_varchar && ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char && ptr->variable->type->type != ECPGt_string) && atoi(ptr->variable->type->size) > 1) else if ((ptr->variable->type->type != ECPGt_varchar && ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char && ptr->variable->type->type != ECPGt_string) && atoi(ptr->variable->type->size) > 1)
{ {
newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, make_str("1"), ptr->variable->type->u.element->counter), ptr->variable->type->size), 0); newvar = new_variable(cat_str(4, mm_strdup("("), mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, mm_strdup("1"), ptr->variable->type->u.element->counter), ptr->variable->type->size), 0);
sprintf(temp, "%d, (", ecpg_internal_var++); sprintf(temp, "%d, (", ecpg_internal_var++);
} }
else if ((ptr->variable->type->type == ECPGt_varchar || ptr->variable->type->type == ECPGt_char || ptr->variable->type->type == ECPGt_unsigned_char || ptr->variable->type->type == ECPGt_string) && atoi(ptr->variable->type->size) > 1) else if ((ptr->variable->type->type == ECPGt_varchar || ptr->variable->type->type == ECPGt_char || ptr->variable->type->type == ECPGt_unsigned_char || ptr->variable->type->type == ECPGt_string) && atoi(ptr->variable->type->size) > 1)
{ {
newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->counter), 0); newvar = new_variable(cat_str(4, mm_strdup("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->counter), 0);
if (ptr->variable->type->type == ECPGt_varchar) if (ptr->variable->type->type == ECPGt_varchar)
sprintf(temp, "%d, &(", ecpg_internal_var++); sprintf(temp, "%d, &(", ecpg_internal_var++);
else else
@ -291,7 +282,7 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
else if (ptr->variable->type->type == ECPGt_struct || ptr->variable->type->type == ECPGt_union) else if (ptr->variable->type->type == ECPGt_struct || ptr->variable->type->type == ECPGt_union)
{ {
sprintf(temp, "%d)))", ecpg_internal_var); sprintf(temp, "%d)))", ecpg_internal_var);
newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.members, ptr->variable->type->type, ptr->variable->type->type_name, ptr->variable->type->struct_sizeof), 0); newvar = new_variable(cat_str(4, mm_strdup("(*("), mm_strdup(ptr->variable->type->type_name), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.members, ptr->variable->type->type, ptr->variable->type->type_name, ptr->variable->type->struct_sizeof), 0);
sprintf(temp, "%d, &(", ecpg_internal_var++); sprintf(temp, "%d, &(", ecpg_internal_var++);
} }
else if (ptr->variable->type->type == ECPGt_array) else if (ptr->variable->type->type == ECPGt_array)
@ -299,24 +290,24 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
if (ptr->variable->type->u.element->type == ECPGt_struct || ptr->variable->type->u.element->type == ECPGt_union) if (ptr->variable->type->u.element->type == ECPGt_struct || ptr->variable->type->u.element->type == ECPGt_union)
{ {
sprintf(temp, "%d)))", ecpg_internal_var); sprintf(temp, "%d)))", ecpg_internal_var);
newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.element->u.members, ptr->variable->type->u.element->type, ptr->variable->type->u.element->type_name, ptr->variable->type->u.element->struct_sizeof), 0); newvar = new_variable(cat_str(4, mm_strdup("(*("), mm_strdup(ptr->variable->type->u.element->type_name), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.element->u.members, ptr->variable->type->u.element->type, ptr->variable->type->u.element->type_name, ptr->variable->type->u.element->struct_sizeof), 0);
sprintf(temp, "%d, (", ecpg_internal_var++); sprintf(temp, "%d, (", ecpg_internal_var++);
} }
else else
{ {
newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, ptr->variable->type->u.element->size, ptr->variable->type->u.element->counter), ptr->variable->type->size), 0); newvar = new_variable(cat_str(4, mm_strdup("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, ptr->variable->type->u.element->size, ptr->variable->type->u.element->counter), ptr->variable->type->size), 0);
sprintf(temp, "%d, &(", ecpg_internal_var++); sprintf(temp, "%d, &(", ecpg_internal_var++);
} }
} }
else else
{ {
newvar = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->counter), 0); newvar = new_variable(cat_str(4, mm_strdup("*("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->counter), 0);
sprintf(temp, "%d, &(", ecpg_internal_var++); sprintf(temp, "%d, &(", ecpg_internal_var++);
} }
/* create call to "ECPGset_var(<counter>, <pointer>. <line number>)" */ /* create call to "ECPGset_var(<counter>, <pointer>. <line number>)" */
if (!skip_set_var) if (!skip_set_var)
result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n")); result = cat_str(5, result, mm_strdup("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), mm_strdup("), __LINE__);\n"));
/* now the indicator if there is one and it's not a global variable */ /* now the indicator if there is one and it's not a global variable */
if ((ptr->indicator->type->type == ECPGt_NO_INDICATOR) || (ptr->indicator->brace_level == 0)) if ((ptr->indicator->type->type == ECPGt_NO_INDICATOR) || (ptr->indicator->brace_level == 0))
@ -332,7 +323,7 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
if (ptr->indicator->type->type == ECPGt_struct || ptr->indicator->type->type == ECPGt_union) if (ptr->indicator->type->type == ECPGt_struct || ptr->indicator->type->type == ECPGt_union)
{ {
sprintf(temp, "%d)))", ecpg_internal_var); sprintf(temp, "%d)))", ecpg_internal_var);
newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.members, ptr->indicator->type->type, ptr->indicator->type->type_name, ptr->indicator->type->struct_sizeof), 0); newind = new_variable(cat_str(4, mm_strdup("(*("), mm_strdup(ptr->indicator->type->type_name), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.members, ptr->indicator->type->type, ptr->indicator->type->type_name, ptr->indicator->type->struct_sizeof), 0);
sprintf(temp, "%d, &(", ecpg_internal_var++); sprintf(temp, "%d, &(", ecpg_internal_var++);
} }
else if (ptr->indicator->type->type == ECPGt_array) else if (ptr->indicator->type->type == ECPGt_array)
@ -340,28 +331,28 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
if (ptr->indicator->type->u.element->type == ECPGt_struct || ptr->indicator->type->u.element->type == ECPGt_union) if (ptr->indicator->type->u.element->type == ECPGt_struct || ptr->indicator->type->u.element->type == ECPGt_union)
{ {
sprintf(temp, "%d)))", ecpg_internal_var); sprintf(temp, "%d)))", ecpg_internal_var);
newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.element->u.members, ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->type_name, ptr->indicator->type->u.element->struct_sizeof), 0); newind = new_variable(cat_str(4, mm_strdup("(*("), mm_strdup(ptr->indicator->type->u.element->type_name), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.element->u.members, ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->type_name, ptr->indicator->type->u.element->struct_sizeof), 0);
sprintf(temp, "%d, (", ecpg_internal_var++); sprintf(temp, "%d, (", ecpg_internal_var++);
} }
else else
{ {
newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->size, ptr->indicator->type->u.element->counter), ptr->indicator->type->size), 0); newind = new_variable(cat_str(4, mm_strdup("("), mm_strdup(ecpg_type_name(ptr->indicator->type->u.element->type)), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->size, ptr->indicator->type->u.element->counter), ptr->indicator->type->size), 0);
sprintf(temp, "%d, &(", ecpg_internal_var++); sprintf(temp, "%d, &(", ecpg_internal_var++);
} }
} }
else if (atoi(ptr->indicator->type->size) > 1) else if (atoi(ptr->indicator->type->size) > 1)
{ {
newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->counter), 0); newind = new_variable(cat_str(4, mm_strdup("("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->counter), 0);
sprintf(temp, "%d, (", ecpg_internal_var++); sprintf(temp, "%d, (", ecpg_internal_var++);
} }
else else
{ {
newind = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->counter), 0); newind = new_variable(cat_str(4, mm_strdup("*("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), mm_strdup(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->counter), 0);
sprintf(temp, "%d, &(", ecpg_internal_var++); sprintf(temp, "%d, &(", ecpg_internal_var++);
} }
/* create call to "ECPGset_var(<counter>, <pointer>. <line number>)" */ /* create call to "ECPGset_var(<counter>, <pointer>. <line number>)" */
result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n")); result = cat_str(5, result, mm_strdup("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), mm_strdup("), __LINE__);\n"));
} }
add_variable_to_tail(&newlist, newvar, newind); add_variable_to_tail(&newlist, newvar, newind);

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,7 @@
/* defines */ /* defines */
#define STRUCT_DEPTH 128 #define STRUCT_DEPTH 128
#define EMPTY make_str("") #define EMPTY mm_strdup("")
/* variables */ /* variables */
@ -62,7 +62,6 @@ extern struct ECPGstruct_member *struct_member_list[STRUCT_DEPTH];
extern const char *get_dtype(enum ECPGdtype); extern const char *get_dtype(enum ECPGdtype);
extern void lex_init(void); extern void lex_init(void);
extern char *make_str(const char *);
extern void output_line_number(void); extern void output_line_number(void);
extern void output_statement(char *, int, enum ECPG_statement_type); extern void output_statement(char *, int, enum ECPG_statement_type);
extern void output_prepare_statement(char *, char *); extern void output_prepare_statement(char *, char *);

View File

@ -397,7 +397,7 @@ sub dump_fields {
&add_to_buffer('rules', " \$\$=EMPTY; }"); &add_to_buffer('rules', " \$\$=EMPTY; }");
} }
else { else {
# Go through each field and try to 'aggregate' the tokens into a single 'make_str' where possible # Go through each field and try to 'aggregate' the tokens into a single 'mm_strdup' where possible
$cnt = 0; $cnt = 0;
for ($z = 0; $z < $len; $z++) { for ($z = 0; $z < $len; $z++) {
if (substr($flds{$z}, 1, 1) eq "\$") { if (substr($flds{$z}, 1, 1) eq "\$") {
@ -410,7 +410,7 @@ sub dump_fields {
while (1) { while (1) {
if ($z >= $len - 1 || substr($flds{$z + 1}, 1, 1) eq "\$") { if ($z >= $len - 1 || substr($flds{$z + 1}, 1, 1) eq "\$") {
# We're at the end... # We're at the end...
$flds_new{$cnt++} = "make_str(\"" . $str . "\")"; $flds_new{$cnt++} = "mm_strdup(\"" . $str . "\")";
last; last;
} }
$z++; $z++;

View File

@ -120,7 +120,7 @@ ECPGmake_array_type(struct ECPGtype * type, char *size)
struct ECPGtype * struct ECPGtype *
ECPGmake_struct_type(struct ECPGstruct_member * rm, enum ECPGttype type, char *type_name, char *struct_sizeof) ECPGmake_struct_type(struct ECPGstruct_member * rm, enum ECPGttype type, char *type_name, char *struct_sizeof)
{ {
struct ECPGtype *ne = ECPGmake_simple_type(type, make_str("1"), 0); struct ECPGtype *ne = ECPGmake_simple_type(type, mm_strdup("1"), 0);
ne->type_name = mm_strdup(type_name); ne->type_name = mm_strdup(type_name);
ne->u.members = ECPGstruct_member_dup(rm); ne->u.members = ECPGstruct_member_dup(rm);
@ -308,7 +308,7 @@ ECPGdump_a_type(FILE *o, const char *name, struct ECPGtype * type, const int bra
if (ind_type != NULL) if (ind_type != NULL)
{ {
if (ind_type->type == ECPGt_NO_INDICATOR) if (ind_type->type == ECPGt_NO_INDICATOR)
ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, make_str("-1"), NULL, ind_prefix, 0); ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, mm_strdup("-1"), NULL, ind_prefix, 0);
else else
{ {
ECPGdump_a_simple(o, ind_name, ind_type->u.element->type, ECPGdump_a_simple(o, ind_name, ind_type->u.element->type,
@ -321,7 +321,7 @@ ECPGdump_a_type(FILE *o, const char *name, struct ECPGtype * type, const int bra
if (indicator_set && ind_type->type != ECPGt_struct) if (indicator_set && ind_type->type != ECPGt_struct)
mmerror(INDICATOR_NOT_STRUCT, ET_FATAL, "indicator for struct has to be a struct"); mmerror(INDICATOR_NOT_STRUCT, ET_FATAL, "indicator for struct has to be a struct");
ECPGdump_a_struct(o, name, ind_name, make_str("1"), type, ind_type, prefix, ind_prefix); ECPGdump_a_struct(o, name, ind_name, mm_strdup("1"), type, ind_type, prefix, ind_prefix);
break; break;
case ECPGt_union: /* cannot dump a complete union */ case ECPGt_union: /* cannot dump a complete union */
base_yyerror("type of union has to be specified"); base_yyerror("type of union has to be specified");
@ -330,25 +330,25 @@ ECPGdump_a_type(FILE *o, const char *name, struct ECPGtype * type, const int bra
if (indicator_set && (ind_type->type == ECPGt_struct || ind_type->type == ECPGt_array)) if (indicator_set && (ind_type->type == ECPGt_struct || ind_type->type == ECPGt_array))
mmerror(INDICATOR_NOT_SIMPLE, ET_FATAL, "indicator for simple data type has to be simple"); mmerror(INDICATOR_NOT_SIMPLE, ET_FATAL, "indicator for simple data type has to be simple");
ECPGdump_a_simple(o, name, type->type, make_str("1"), (arr_str_siz && strcmp(arr_str_siz, "0") != 0) ? arr_str_siz : make_str("1"), struct_sizeof, prefix, 0); ECPGdump_a_simple(o, name, type->type, mm_strdup("1"), (arr_str_siz && strcmp(arr_str_siz, "0") != 0) ? arr_str_siz : mm_strdup("1"), struct_sizeof, prefix, 0);
if (ind_type != NULL) if (ind_type != NULL)
ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, (arr_str_siz && strcmp(arr_str_siz, "0") != 0) ? arr_str_siz : make_str("-1"), ind_struct_sizeof, ind_prefix, 0); ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, (arr_str_siz && strcmp(arr_str_siz, "0") != 0) ? arr_str_siz : mm_strdup("-1"), ind_struct_sizeof, ind_prefix, 0);
break; break;
case ECPGt_descriptor: case ECPGt_descriptor:
if (indicator_set && (ind_type->type == ECPGt_struct || ind_type->type == ECPGt_array)) if (indicator_set && (ind_type->type == ECPGt_struct || ind_type->type == ECPGt_array))
mmerror(INDICATOR_NOT_SIMPLE, ET_FATAL, "indicator for simple data type has to be simple"); mmerror(INDICATOR_NOT_SIMPLE, ET_FATAL, "indicator for simple data type has to be simple");
ECPGdump_a_simple(o, name, type->type, NULL, make_str("-1"), NULL, prefix, 0); ECPGdump_a_simple(o, name, type->type, NULL, mm_strdup("-1"), NULL, prefix, 0);
if (ind_type != NULL) if (ind_type != NULL)
ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, make_str("-1"), NULL, ind_prefix, 0); ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, mm_strdup("-1"), NULL, ind_prefix, 0);
break; break;
default: default:
if (indicator_set && (ind_type->type == ECPGt_struct || ind_type->type == ECPGt_array)) if (indicator_set && (ind_type->type == ECPGt_struct || ind_type->type == ECPGt_array))
mmerror(INDICATOR_NOT_SIMPLE, ET_FATAL, "indicator for simple data type has to be simple"); mmerror(INDICATOR_NOT_SIMPLE, ET_FATAL, "indicator for simple data type has to be simple");
ECPGdump_a_simple(o, name, type->type, type->size, (arr_str_siz && strcmp(arr_str_siz, "0") != 0) ? arr_str_siz : make_str("-1"), struct_sizeof, prefix, type->counter); ECPGdump_a_simple(o, name, type->type, type->size, (arr_str_siz && strcmp(arr_str_siz, "0") != 0) ? arr_str_siz : mm_strdup("-1"), struct_sizeof, prefix, type->counter);
if (ind_type != NULL) if (ind_type != NULL)
ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, (arr_str_siz && strcmp(arr_str_siz, "0") != 0) ? arr_str_siz : make_str("-1"), ind_struct_sizeof, ind_prefix, 0); ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, (arr_str_siz && strcmp(arr_str_siz, "0") != 0) ? arr_str_siz : mm_strdup("-1"), ind_struct_sizeof, ind_prefix, 0);
break; break;
} }
} }

View File

@ -446,7 +446,7 @@ dump_variables(struct arguments * list, int mode)
/* Then the current element and its indicator */ /* Then the current element and its indicator */
ECPGdump_a_type(yyout, list->variable->name, list->variable->type, list->variable->brace_level, ECPGdump_a_type(yyout, list->variable->name, list->variable->type, list->variable->brace_level,
list->indicator->name, list->indicator->type, list->indicator->brace_level, list->indicator->name, list->indicator->type, list->indicator->brace_level,
NULL, NULL, make_str("0"), NULL, NULL); NULL, NULL, mm_strdup("0"), NULL, NULL);
/* Then release the list element. */ /* Then release the list element. */
if (mode != 0) if (mode != 0)
@ -542,7 +542,7 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
if (pointer_len) if (pointer_len)
{ {
*length = *dimension; *length = *dimension;
*dimension = make_str("0"); *dimension = mm_strdup("0");
} }
if (atoi(*length) >= 0) if (atoi(*length) >= 0)
@ -552,13 +552,13 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
case ECPGt_varchar: case ECPGt_varchar:
/* pointer has to get dimension 0 */ /* pointer has to get dimension 0 */
if (pointer_len) if (pointer_len)
*dimension = make_str("0"); *dimension = mm_strdup("0");
/* one index is the string length */ /* one index is the string length */
if (atoi(*length) < 0) if (atoi(*length) < 0)
{ {
*length = *dimension; *length = *dimension;
*dimension = make_str("-1"); *dimension = mm_strdup("-1");
} }
break; break;
@ -568,13 +568,13 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
/* char ** */ /* char ** */
if (pointer_len == 2) if (pointer_len == 2)
{ {
*length = *dimension = make_str("0"); *length = *dimension = mm_strdup("0");
break; break;
} }
/* pointer has to get length 0 */ /* pointer has to get length 0 */
if (pointer_len == 1) if (pointer_len == 1)
*length = make_str("0"); *length = mm_strdup("0");
/* one index is the string length */ /* one index is the string length */
if (atoi(*length) < 0) if (atoi(*length) < 0)
@ -589,13 +589,13 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
* do not change this for typedefs since it will be * do not change this for typedefs since it will be
* changed later on when the variable is defined * changed later on when the variable is defined
*/ */
*length = make_str("1"); *length = mm_strdup("1");
else if (strcmp(*dimension, "0") == 0) else if (strcmp(*dimension, "0") == 0)
*length = make_str("-1"); *length = mm_strdup("-1");
else else
*length = *dimension; *length = *dimension;
*dimension = make_str("-1"); *dimension = mm_strdup("-1");
} }
break; break;
default: default:
@ -603,7 +603,7 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
if (pointer_len) if (pointer_len)
{ {
*length = *dimension; *length = *dimension;
*dimension = make_str("0"); *dimension = mm_strdup("0");
} }
if (atoi(*length) >= 0) if (atoi(*length) >= 0)