@@ -266,6 +266,9 @@ Py_Main(int argc, wchar_t **argv)
266266 wchar_t * module = NULL ;
267267 FILE * fp = stdin ;
268268 char * p ;
269+ #ifdef MS_WINDOWS
270+ wchar_t * wp ;
271+ #endif
269272 int skipfirstline = 0 ;
270273 int stdin_is_interactive = 0 ;
271274 int help = 0 ;
@@ -402,29 +405,48 @@ Py_Main(int argc, wchar_t **argv)
402405 (p = Py_GETENV ("PYTHONNOUSERSITE" )) && * p != '\0' )
403406 Py_NoUserSiteDirectory = 1 ;
404407
408+ #ifdef MS_WINDOWS
409+ if (!Py_IgnoreEnvironmentFlag && (wp = _wgetenv (L"PYTHONWARNINGS" )) &&
410+ * wp != L'\0' ) {
411+ wchar_t * buf , * warning ;
412+
413+ buf = (wchar_t * )malloc ((wcslen (wp ) + 1 ) * sizeof (wchar_t ));
414+ if (buf == NULL )
415+ Py_FatalError (
416+ "not enough memory to copy PYTHONWARNINGS" );
417+ wcscpy (buf , wp );
418+ for (warning = wcstok (buf , L"," );
419+ warning != NULL ;
420+ warning = wcstok (NULL , L"," )) {
421+ PySys_AddWarnOption (warning );
422+ }
423+ free (buf );
424+ }
425+ #else
405426 if ((p = Py_GETENV ("PYTHONWARNINGS" )) && * p != '\0' ) {
406- char * buf , * warning ;
427+ char * buf , * oldloc ;
428+ wchar_t * warning ;
407429
430+ /* settle for strtok here as there's no one standard
431+ C89 wcstok */
408432 buf = (char * )malloc (strlen (p ) + 1 );
409433 if (buf == NULL )
410434 Py_FatalError (
411435 "not enough memory to copy PYTHONWARNINGS" );
412436 strcpy (buf , p );
413- for (warning = strtok (buf , "," );
414- warning != NULL ;
415- warning = strtok (NULL , "," )) {
416- wchar_t * wide_warning ;
417- size_t len = strlen (buf );
418- wide_warning = (wchar_t * )malloc ((len + 1 ) * sizeof (wchar_t ));
419- if (wide_warning == NULL )
420- Py_FatalError (
421- "not enough memory to copy PYTHONWARNINGS" );
422- mbstowcs (wide_warning , warning , len );
423- PySys_AddWarnOption (wide_warning );
424- free (wide_warning );
437+ oldloc = strdup (setlocale (LC_ALL , NULL ));
438+ setlocale (LC_ALL , "" );
439+ for (p = strtok (buf , "," ); p != NULL ; p = strtok (NULL , "," )) {
440+ if ((warning = _Py_char2wchar (p )) != NULL ) {
441+ PySys_AddWarnOption (warning );
442+ free (warning );
443+ }
425444 }
445+ setlocale (LC_ALL , oldloc );
446+ free (oldloc );
426447 free (buf );
427448 }
449+ #endif
428450
429451 if (command == NULL && module == NULL && _PyOS_optind < argc &&
430452 wcscmp (argv [_PyOS_optind ], L"-" ) != 0 )
0 commit comments