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:
		| @ -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; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -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; | ||||
| 			}			 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user