mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	There is no need to have to identical functions in ecpg thus removing one of them.
This commit is contained in:
		@@ -188,7 +188,7 @@ output_get_descr(char *desc_name, char *index)
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		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();
 | 
			
		||||
	fputs("ECPGd_EODT);\n", yyout);
 | 
			
		||||
@@ -293,7 +293,7 @@ output_set_descr(char *desc_name, char *index)
 | 
			
		||||
			case ECPGd_length:
 | 
			
		||||
			case ECPGd_type:
 | 
			
		||||
				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;
 | 
			
		||||
 | 
			
		||||
			default:
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ ECPG: stmtPrepareStmt block
 | 
			
		||||
		if ($1.type == NULL || strlen($1.type) == 0)
 | 
			
		||||
			output_prepare_statement($1.name, $1.stmt);
 | 
			
		||||
		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
 | 
			
		||||
	{
 | 
			
		||||
@@ -212,21 +212,21 @@ ECPG: var_valueNumericOnly addon
 | 
			
		||||
		if ($1[0] == '$')
 | 
			
		||||
		{
 | 
			
		||||
			free($1);
 | 
			
		||||
			$1 = make_str("$0");
 | 
			
		||||
			$1 = mm_strdup("$0");
 | 
			
		||||
		}
 | 
			
		||||
ECPG: fetch_argscursor_name addon
 | 
			
		||||
		add_additional_variables($1, false);
 | 
			
		||||
		if ($1[0] == ':')
 | 
			
		||||
		{
 | 
			
		||||
			free($1);
 | 
			
		||||
			$1 = make_str("$0");
 | 
			
		||||
			$1 = mm_strdup("$0");
 | 
			
		||||
		}
 | 
			
		||||
ECPG: fetch_argsfrom_incursor_name addon
 | 
			
		||||
		add_additional_variables($2, false);
 | 
			
		||||
		if ($2[0] == ':')
 | 
			
		||||
		{
 | 
			
		||||
			free($2);
 | 
			
		||||
			$2 = make_str("$0");
 | 
			
		||||
			$2 = mm_strdup("$0");
 | 
			
		||||
		}
 | 
			
		||||
ECPG: fetch_argsNEXTopt_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] == ':')
 | 
			
		||||
		{
 | 
			
		||||
			free($3);
 | 
			
		||||
			$3 = make_str("$0");
 | 
			
		||||
			$3 = mm_strdup("$0");
 | 
			
		||||
		}
 | 
			
		||||
ECPG: fetch_argsSignedIconstopt_from_incursor_name addon
 | 
			
		||||
		add_additional_variables($3, false);
 | 
			
		||||
		if ($3[0] == ':')
 | 
			
		||||
		{
 | 
			
		||||
			free($3);
 | 
			
		||||
			$3 = make_str("$0");
 | 
			
		||||
			$3 = mm_strdup("$0");
 | 
			
		||||
		}
 | 
			
		||||
		if ($1[0] == '$')
 | 
			
		||||
		{
 | 
			
		||||
			free($1);
 | 
			
		||||
			$1 = make_str("$0");
 | 
			
		||||
			$1 = mm_strdup("$0");
 | 
			
		||||
		}
 | 
			
		||||
ECPG: fetch_argsFORWARDALLopt_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] == ':')
 | 
			
		||||
		{
 | 
			
		||||
			free($4);
 | 
			
		||||
			$4 = make_str("$0");
 | 
			
		||||
			$4 = mm_strdup("$0");
 | 
			
		||||
		}
 | 
			
		||||
ECPG: fetch_argsABSOLUTE_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] == ':')
 | 
			
		||||
		{
 | 
			
		||||
			free($4);
 | 
			
		||||
			$4 = make_str("$0");
 | 
			
		||||
			$4 = mm_strdup("$0");
 | 
			
		||||
		}
 | 
			
		||||
		if ($2[0] == '$')
 | 
			
		||||
		{
 | 
			
		||||
			free($2);
 | 
			
		||||
			$2 = make_str("$0");
 | 
			
		||||
			$2 = mm_strdup("$0");
 | 
			
		||||
		}
 | 
			
		||||
ECPG: cursor_namename rule
 | 
			
		||||
	| char_civar
 | 
			
		||||
@@ -287,7 +287,7 @@ ECPG: PrepareStmtPREPAREprepared_nameprep_type_clauseASPreparableStmt block
 | 
			
		||||
	{
 | 
			
		||||
		$$.name = $2;
 | 
			
		||||
		$$.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
 | 
			
		||||
	{
 | 
			
		||||
@@ -300,7 +300,7 @@ ECPG: ExecuteStmtEXECUTEprepared_nameexecute_param_clauseexecute_rest block
 | 
			
		||||
ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectStmt block
 | 
			
		||||
	{
 | 
			
		||||
		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;
 | 
			
		||||
		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->connection = connection;
 | 
			
		||||
		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_oos = NULL;
 | 
			
		||||
		this->argsresult = argsresult;
 | 
			
		||||
@@ -337,31 +337,31 @@ ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectSt
 | 
			
		||||
			c2[0] = '.';
 | 
			
		||||
			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 */
 | 
			
		||||
			$$ = cat_str(3, adjust_outofscope_cursor_vars(this),
 | 
			
		||||
				make_str("ECPG_informix_reset_sqlca();"),
 | 
			
		||||
				mm_strdup("ECPG_informix_reset_sqlca();"),
 | 
			
		||||
				comment);
 | 
			
		||||
		else
 | 
			
		||||
			$$ = cat2_str(adjust_outofscope_cursor_vars(this), comment);
 | 
			
		||||
	}
 | 
			
		||||
ECPG: ClosePortalStmtCLOSEcursor_name block
 | 
			
		||||
	{
 | 
			
		||||
		char *cursor_marker = $2[0] == ':' ? make_str("$0") : $2;
 | 
			
		||||
		$$ = cat2_str(make_str("close"), cursor_marker);
 | 
			
		||||
		char *cursor_marker = $2[0] == ':' ? mm_strdup("$0") : $2;
 | 
			
		||||
		$$ = cat2_str(mm_strdup("close"), cursor_marker);
 | 
			
		||||
	}
 | 
			
		||||
ECPG: opt_hold block
 | 
			
		||||
	{
 | 
			
		||||
		if (compat == ECPG_COMPAT_INFORMIX_SE && autocommit)
 | 
			
		||||
			$$ = make_str("with hold");
 | 
			
		||||
			$$ = mm_strdup("with hold");
 | 
			
		||||
		else
 | 
			
		||||
			$$ = EMPTY;
 | 
			
		||||
	}
 | 
			
		||||
ECPG: into_clauseINTOOptTempTableName block
 | 
			
		||||
					{
 | 
			
		||||
						FoundInto = 1;
 | 
			
		||||
						$$= cat2_str(make_str("into"), $2);
 | 
			
		||||
						$$= cat2_str(mm_strdup("into"), $2);
 | 
			
		||||
					}
 | 
			
		||||
	| ecpg_into                     { $$ = EMPTY; }
 | 
			
		||||
ECPG: table_refselect_with_parens addon
 | 
			
		||||
@@ -369,16 +369,16 @@ ECPG: table_refselect_with_parens addon
 | 
			
		||||
ECPG: TypenameSimpleTypenameopt_array_bounds block
 | 
			
		||||
	{	$$ = cat2_str($1, $2.str); }
 | 
			
		||||
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
 | 
			
		||||
	{
 | 
			
		||||
		$$.index1 = $1.index1;
 | 
			
		||||
		$$.index2 = $1.index2;
 | 
			
		||||
		if (strcmp($$.index1, "-1") == 0)
 | 
			
		||||
			$$.index1 = make_str("0");
 | 
			
		||||
			$$.index1 = mm_strdup("0");
 | 
			
		||||
		else if (strcmp($1.index2, "-1") == 0)
 | 
			
		||||
			$$.index2 = make_str("0");
 | 
			
		||||
		$$.str = cat_str(2, $1.str, make_str("[]"));
 | 
			
		||||
			$$.index2 = mm_strdup("0");
 | 
			
		||||
		$$.str = cat_str(2, $1.str, mm_strdup("[]"));
 | 
			
		||||
	}
 | 
			
		||||
	| opt_array_bounds '[' Iresult ']'
 | 
			
		||||
	{
 | 
			
		||||
@@ -388,12 +388,12 @@ ECPG: opt_array_boundsopt_array_bounds'['']' block
 | 
			
		||||
			$$.index1 = strdup($3);
 | 
			
		||||
		else if (strcmp($1.index2, "-1") == 0)
 | 
			
		||||
			$$.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
 | 
			
		||||
	{
 | 
			
		||||
		$$.index1 = make_str("-1");
 | 
			
		||||
		$$.index2 = make_str("-1");
 | 
			
		||||
		$$.index1 = mm_strdup("-1");
 | 
			
		||||
		$$.index2 = mm_strdup("-1");
 | 
			
		||||
		$$.str= EMPTY;
 | 
			
		||||
	}
 | 
			
		||||
ECPG: IconstICONST block
 | 
			
		||||
@@ -404,8 +404,8 @@ ECPG: AexprConstNULL_P rule
 | 
			
		||||
ECPG: ColIdcol_name_keyword rule
 | 
			
		||||
	| ECPGKeywords                  { $$ = $1; }
 | 
			
		||||
	| ECPGCKeywords                 { $$ = $1; }
 | 
			
		||||
	| CHAR_P                        { $$ = make_str("char"); }
 | 
			
		||||
	| VALUES                        { $$ = make_str("values"); }
 | 
			
		||||
	| CHAR_P                        { $$ = mm_strdup("char"); }
 | 
			
		||||
	| VALUES                        { $$ = mm_strdup("values"); }
 | 
			
		||||
ECPG: type_function_nametype_func_name_keyword rule
 | 
			
		||||
	| ECPGKeywords                          { $$ = $1; }
 | 
			
		||||
	| ECPGTypeName                          { $$ = $1; }
 | 
			
		||||
@@ -418,60 +418,60 @@ ECPG: VariableShowStmtSHOWALL block
 | 
			
		||||
ECPG: FetchStmtMOVEfetch_args rule
 | 
			
		||||
	| 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
 | 
			
		||||
	{
 | 
			
		||||
		char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3;
 | 
			
		||||
		char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3;
 | 
			
		||||
		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
 | 
			
		||||
	{
 | 
			
		||||
		char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4;
 | 
			
		||||
		char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4;
 | 
			
		||||
		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
 | 
			
		||||
	{
 | 
			
		||||
		char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3;
 | 
			
		||||
		char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3;
 | 
			
		||||
		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
 | 
			
		||||
	{
 | 
			
		||||
		char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4;
 | 
			
		||||
		char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4;
 | 
			
		||||
		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
 | 
			
		||||
	{
 | 
			
		||||
		char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3;
 | 
			
		||||
		char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3;
 | 
			
		||||
		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
 | 
			
		||||
	{
 | 
			
		||||
		char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4;
 | 
			
		||||
		char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4;
 | 
			
		||||
		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
 | 
			
		||||
	{
 | 
			
		||||
		char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3;
 | 
			
		||||
		char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3;
 | 
			
		||||
		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
 | 
			
		||||
	{
 | 
			
		||||
		char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4;
 | 
			
		||||
		char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4;
 | 
			
		||||
		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
 | 
			
		||||
        {
 | 
			
		||||
                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
 | 
			
		||||
	| civar	{ $$ = $1; }
 | 
			
		||||
 
 | 
			
		||||
@@ -148,15 +148,6 @@ cat_str(int count, ...)
 | 
			
		||||
	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 *
 | 
			
		||||
make2_str(char *str1, char *str2)
 | 
			
		||||
{
 | 
			
		||||
@@ -219,7 +210,7 @@ create_questionmarks(char *name, bool array)
 | 
			
		||||
	for (; count > 0; count --)
 | 
			
		||||
	{
 | 
			
		||||
		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 " ," */
 | 
			
		||||
@@ -242,7 +233,7 @@ adjust_outofscope_cursor_vars(struct cursor *cur)
 | 
			
		||||
	 * instead of the variable. Do it only for local variables, not for globals.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	char *result = make_str("");
 | 
			
		||||
	char *result = mm_strdup("");
 | 
			
		||||
	int 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)
 | 
			
		||||
			{
 | 
			
		||||
				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++);
 | 
			
		||||
			}
 | 
			
		||||
			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)
 | 
			
		||||
					sprintf(temp, "%d, &(", ecpg_internal_var++);
 | 
			
		||||
				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)
 | 
			
		||||
			{
 | 
			
		||||
				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++);
 | 
			
		||||
			}
 | 
			
		||||
			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)
 | 
			
		||||
				{
 | 
			
		||||
					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++);
 | 
			
		||||
				}
 | 
			
		||||
				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++);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			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++);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* create call to "ECPGset_var(<counter>, <pointer>. <line number>)" */
 | 
			
		||||
			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 */
 | 
			
		||||
			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)
 | 
			
		||||
				{
 | 
			
		||||
					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++);
 | 
			
		||||
				}
 | 
			
		||||
				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)
 | 
			
		||||
					{
 | 
			
		||||
						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++);
 | 
			
		||||
					}
 | 
			
		||||
					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++);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				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++);
 | 
			
		||||
				}
 | 
			
		||||
				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++);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				/* 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);
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -14,7 +14,7 @@
 | 
			
		||||
/* defines */
 | 
			
		||||
 | 
			
		||||
#define STRUCT_DEPTH 128
 | 
			
		||||
#define EMPTY make_str("")
 | 
			
		||||
#define EMPTY mm_strdup("")
 | 
			
		||||
 | 
			
		||||
/* variables */
 | 
			
		||||
 | 
			
		||||
@@ -62,7 +62,6 @@ extern struct ECPGstruct_member *struct_member_list[STRUCT_DEPTH];
 | 
			
		||||
 | 
			
		||||
extern const char *get_dtype(enum ECPGdtype);
 | 
			
		||||
extern void lex_init(void);
 | 
			
		||||
extern char *make_str(const char *);
 | 
			
		||||
extern void output_line_number(void);
 | 
			
		||||
extern void output_statement(char *, int, enum ECPG_statement_type);
 | 
			
		||||
extern void output_prepare_statement(char *, char *);
 | 
			
		||||
 
 | 
			
		||||
@@ -397,7 +397,7 @@ sub dump_fields {
 | 
			
		||||
	    &add_to_buffer('rules', " \$\$=EMPTY; }");
 | 
			
		||||
	}
 | 
			
		||||
	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;
 | 
			
		||||
	    for ($z = 0; $z < $len; $z++) {
 | 
			
		||||
		if (substr($flds{$z}, 1, 1) eq "\$") {
 | 
			
		||||
@@ -410,7 +410,7 @@ sub dump_fields {
 | 
			
		||||
		while (1) {
 | 
			
		||||
		    if ($z >= $len - 1 || substr($flds{$z + 1}, 1, 1) eq "\$") {
 | 
			
		||||
			# We're at the end...
 | 
			
		||||
			$flds_new{$cnt++} = "make_str(\"" . $str . "\")";
 | 
			
		||||
			$flds_new{$cnt++} = "mm_strdup(\"" . $str . "\")";
 | 
			
		||||
			last;
 | 
			
		||||
		    }
 | 
			
		||||
		    $z++;
 | 
			
		||||
 
 | 
			
		||||
@@ -120,7 +120,7 @@ ECPGmake_array_type(struct ECPGtype * type, char *size)
 | 
			
		||||
struct ECPGtype *
 | 
			
		||||
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->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->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
 | 
			
		||||
						{
 | 
			
		||||
							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)
 | 
			
		||||
				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;
 | 
			
		||||
		case ECPGt_union:		/* cannot dump a complete union */
 | 
			
		||||
			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))
 | 
			
		||||
				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)
 | 
			
		||||
				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;
 | 
			
		||||
		case ECPGt_descriptor:
 | 
			
		||||
			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");
 | 
			
		||||
 | 
			
		||||
			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)
 | 
			
		||||
				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;
 | 
			
		||||
		default:
 | 
			
		||||
			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");
 | 
			
		||||
 | 
			
		||||
			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)
 | 
			
		||||
				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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -446,7 +446,7 @@ dump_variables(struct arguments * list, int mode)
 | 
			
		||||
	/* Then the current element and its indicator */
 | 
			
		||||
	ECPGdump_a_type(yyout, list->variable->name, list->variable->type, list->variable->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. */
 | 
			
		||||
	if (mode != 0)
 | 
			
		||||
@@ -542,7 +542,7 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
 | 
			
		||||
			if (pointer_len)
 | 
			
		||||
			{
 | 
			
		||||
				*length = *dimension;
 | 
			
		||||
				*dimension = make_str("0");
 | 
			
		||||
				*dimension = mm_strdup("0");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (atoi(*length) >= 0)
 | 
			
		||||
@@ -552,13 +552,13 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
 | 
			
		||||
		case ECPGt_varchar:
 | 
			
		||||
			/* pointer has to get dimension 0 */
 | 
			
		||||
			if (pointer_len)
 | 
			
		||||
				*dimension = make_str("0");
 | 
			
		||||
				*dimension = mm_strdup("0");
 | 
			
		||||
 | 
			
		||||
			/* one index is the string length */
 | 
			
		||||
			if (atoi(*length) < 0)
 | 
			
		||||
			{
 | 
			
		||||
				*length = *dimension;
 | 
			
		||||
				*dimension = make_str("-1");
 | 
			
		||||
				*dimension = mm_strdup("-1");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
@@ -568,13 +568,13 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
 | 
			
		||||
			/* char ** */
 | 
			
		||||
			if (pointer_len == 2)
 | 
			
		||||
			{
 | 
			
		||||
				*length = *dimension = make_str("0");
 | 
			
		||||
				*length = *dimension = mm_strdup("0");
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* pointer has to get length 0 */
 | 
			
		||||
			if (pointer_len == 1)
 | 
			
		||||
				*length = make_str("0");
 | 
			
		||||
				*length = mm_strdup("0");
 | 
			
		||||
 | 
			
		||||
			/* one index is the string length */
 | 
			
		||||
			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
 | 
			
		||||
					 * changed later on when the variable is defined
 | 
			
		||||
					 */
 | 
			
		||||
					*length = make_str("1");
 | 
			
		||||
					*length = mm_strdup("1");
 | 
			
		||||
				else if (strcmp(*dimension, "0") == 0)
 | 
			
		||||
					*length = make_str("-1");
 | 
			
		||||
					*length = mm_strdup("-1");
 | 
			
		||||
				else
 | 
			
		||||
					*length = *dimension;
 | 
			
		||||
 | 
			
		||||
				*dimension = make_str("-1");
 | 
			
		||||
				*dimension = mm_strdup("-1");
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
@@ -603,7 +603,7 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
 | 
			
		||||
			if (pointer_len)
 | 
			
		||||
			{
 | 
			
		||||
				*length = *dimension;
 | 
			
		||||
				*dimension = make_str("0");
 | 
			
		||||
				*dimension = mm_strdup("0");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (atoi(*length) >= 0)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user