improved the standard console handler to handle when ARGV has been overridden in a script
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: run.c 207 2009-06-22 13:01:28Z hyunghwan.chung $
|
||||
* $Id: run.c 210 2009-06-24 08:29:33Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -1004,7 +1004,8 @@ static int build_runarg (
|
||||
}
|
||||
|
||||
key_len = qse_awk_longtostr (
|
||||
argc, 10, QSE_NULL, key, QSE_COUNTOF(key));
|
||||
run->awk, argc, 10,
|
||||
QSE_NULL, key, QSE_COUNTOF(key));
|
||||
QSE_ASSERT (key_len != (qse_size_t)-1);
|
||||
|
||||
/* increment reference count of v_tmp in advance as if
|
||||
@ -2820,10 +2821,21 @@ static int run_print (qse_awk_rtx_t* run, qse_awk_nde_print_t* nde)
|
||||
{
|
||||
if (out[--len] == QSE_T('\0'))
|
||||
{
|
||||
qse_cstr_t errarg;
|
||||
|
||||
errarg.ptr = out;
|
||||
/* provide length up to one character before
|
||||
* the first null not to contains a null
|
||||
* in an error message */
|
||||
errarg.len = qse_strlen(out);
|
||||
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_EIONMNL,
|
||||
nde->line, &errarg
|
||||
);
|
||||
|
||||
/* if so, it skips writing */
|
||||
QSE_AWK_FREE (run->awk, out);
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_EIONMNL, nde->line, QSE_NULL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -2978,11 +2990,22 @@ static int run_printf (qse_awk_rtx_t* run, qse_awk_nde_print_t* nde)
|
||||
{
|
||||
if (out[--len] == QSE_T('\0'))
|
||||
{
|
||||
qse_cstr_t errarg;
|
||||
|
||||
errarg.ptr = out;
|
||||
/* provide length up to one character before
|
||||
* the first null not to contains a null
|
||||
* in an error message */
|
||||
errarg.len = qse_strlen(out);
|
||||
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_EIONMNL,
|
||||
nde->line, &errarg
|
||||
);
|
||||
|
||||
/* the output destination name contains a null
|
||||
* character. */
|
||||
QSE_AWK_FREE (run->awk, out);
|
||||
qse_awk_rtx_seterror (
|
||||
run, QSE_AWK_EIONMNL, nde->line, QSE_NULL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -6380,7 +6403,9 @@ static qse_awk_val_t* eval_getline (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
|
||||
if (in[--len] == QSE_T('\0'))
|
||||
{
|
||||
/* the input source name contains a null
|
||||
* character. make getline return -1 */
|
||||
* character. make getline return -1.
|
||||
* unlike print & printf, it is not a hard
|
||||
* error */
|
||||
QSE_AWK_FREE (run->awk, in);
|
||||
n = -1;
|
||||
goto skip_read;
|
||||
|
Reference in New Issue
Block a user