changed awk to less sensitive about encoding when loading environment.

fixed a bug of setting encoding wrongly with --script-encoding in cmd/awk/awk.c
This commit is contained in:
hyung-hwan 2013-11-04 17:37:08 +00:00
parent 9588bf2910
commit ca1d1ede66
4 changed files with 12 additions and 17 deletions

View File

@ -812,7 +812,7 @@ static int comparg (int argc, qse_char_t* argv[], struct arg_t* arg)
for (i = 0; i < isfl ; i++)
{
if (isf[i].type == QSE_AWK_PARSESTD_FILE)
isf[isfl].u.file.cmgr = arg->script_cmgr;
isf[i].u.file.cmgr = arg->script_cmgr;
}
isf[isfl].type = QSE_AWK_PARSESTD_NULL;
@ -1225,7 +1225,6 @@ int qse_main (int argc, qse_achar_t* argv[])
/* nothing special */
#endif
qse_openstdsios ();
#if defined(_WIN32)
codepage = GetConsoleOutputCP();
@ -1256,7 +1255,9 @@ int qse_main (int argc, qse_achar_t* argv[])
open_mpi (&mpi, argc, argv);
qse_openstdsios ();
ret = qse_runmain (argc, argv, awk_main);
qse_closestdsios ();
close_mpi (&mpi);
@ -1264,7 +1265,6 @@ int qse_main (int argc, qse_achar_t* argv[])
WSACleanup ();
#endif
qse_closestdsios ();
return ret;
}

View File

@ -1945,8 +1945,6 @@ int qse_main (int argc, qse_achar_t* argv[])
/* nothing */
#endif
qse_openstdsios ();
#if defined(_WIN32)
codepage = GetConsoleOutputCP();
@ -1980,7 +1978,9 @@ int qse_main (int argc, qse_achar_t* argv[])
SSL_library_init ();
#endif
qse_openstdsios ();
ret = qse_runmain (argc, argv, httpd_main);
qse_closestdsios ();
#if defined(HAVE_SSL)
/* ERR_remove_state() should be called for each thread if the application is thread */
@ -1995,6 +1995,5 @@ int qse_main (int argc, qse_achar_t* argv[])
WSACleanup ();
#endif
qse_closestdsios ();
return ret;
}

View File

@ -1029,8 +1029,6 @@ int qse_main (int argc, qse_achar_t* argv[])
/* nothing */
#endif
qse_openstdsios ();
#if defined(_WIN32)
codepage = GetConsoleOutputCP();
if (codepage == CP_UTF8)
@ -1051,9 +1049,10 @@ int qse_main (int argc, qse_achar_t* argv[])
qse_setdflcmgrbyid (QSE_CMGR_SLMB);
#endif
qse_openstdsios ();
ret = qse_runmain (argc, argv, sed_main);
qse_closestdsios ();
return ret;
}

View File

@ -1914,16 +1914,16 @@ static int __build_environ (
*eq = QSE_MT('\0');
kptr = qse_mbstowcsdup (envarr[count], &klen, rtx->awk->mmgr);
vptr = qse_mbstowcsdup (eq + 1, QSE_NULL, rtx->awk->mmgr);
/* mbstowcsdup() may fail for invalid encoding. as the environment
* variaables are not under control, call mbstowcsalldup() instead
* to go on despite encoding failure */
kptr = qse_mbstowcsalldup (envarr[count], &klen, rtx->awk->mmgr);
vptr = qse_mbstowcsalldup (eq + 1, QSE_NULL, rtx->awk->mmgr);
if (kptr == QSE_NULL || vptr == QSE_NULL)
{
if (kptr) QSE_MMGR_FREE (rtx->awk->mmgr, kptr);
qse_awk_rtx_refdownval (rtx, v_env);
/* mbstowcsdup() may fail for invalid encoding.
* so setting the error code to ENOMEM may not
* be really accurate */
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
return -1;
}
@ -1942,9 +1942,6 @@ static int __build_environ (
if (kptr) QSE_MMGR_FREE (rtx->awk->mmgr, kptr);
qse_awk_rtx_refdownval (rtx, v_env);
/* mbstowcsdup() may fail for invalid encoding.
* so setting the error code to ENOMEM may not
* be really accurate */
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
return -1;
}