* cygheap.h (cwdstuff): Convert to class. Make posix and dir private.

(cwdstuff::get_posix): New method.
	(cwdstuff::reset_posix): New method.
	* dcrt0.cc (dll_crt0_1): Call setlocale rather than _setlocale_r.
	* environ.cc (environ_init): Ditto.  Prefer "C" locale over current
	codepage default locale.
	* path.cc (chdir): Use cwdstuff::get_posix method instead of accessing
	cwdstuff::posix directly.
	(cwdstuff::set): Defer creating posix path to first usage.
	(cwdstuff::get_posix): Create posix path if it's empty, and return it.
	(cwdstuff::get): Create posix path if it's empty.
	* strfuncs.cc (sys_cp_wcstombs): Use UTF-8 conversion in the "C"
	locale.
	(sys_cp_mbstowcs): Ditto.
	* syscalls.cc (gen_full_path_at): Fetch CWD posix path locked.
	(setlocale): Implement here.  Reset CWD posix path.
This commit is contained in:
Corinna Vinschen
2009-05-13 15:00:06 +00:00
parent 136033a852
commit b6c6ea43f3
7 changed files with 75 additions and 11 deletions

View File

@ -790,16 +790,13 @@ environ_init (char **envp, int envc)
{
char *buf = (char *) alloca (i);
GetEnvironmentVariableA (lc_arr[lc], buf, i);
if (_setlocale_r (_GLOBAL_REENT, LC_CTYPE, buf))
if (setlocale (LC_CTYPE, buf))
{
got_lc = true;
break;
}
}
}
/* No matching POSIX environment variable, use current codepage. */
if (!got_lc)
_setlocale_r (_GLOBAL_REENT, LC_CTYPE, "en_US");
/* We also need the CYGWIN variable early to know the value of the
CYGWIN=upcaseenv setting for the below loop. */
if ((i = GetEnvironmentVariableA ("CYGWIN", NULL, 0)))