* syscalls.cc (internal_setlocale): Only convert $PATH if there is a

$PATH.
This commit is contained in:
Corinna Vinschen 2009-10-19 19:47:15 +00:00
parent 9d52f5c21c
commit 8d648dc555
2 changed files with 19 additions and 7 deletions

View File

@ -1,3 +1,8 @@
2009-10-19 Corinna Vinschen <corinna@vinschen.de>
* syscalls.cc (internal_setlocale): Only convert $PATH if there is a
$PATH.
2009-10-19 Corinna Vinschen <corinna@vinschen.de>
* spawn.cc (av::fixup): Treat non-readable, but executable files as

View File

@ -4242,13 +4242,17 @@ internal_setlocale ()
/* FIXME: It could be necessary to convert the entire environment,
not just PATH. */
tmp_pathbuf tp;
wchar_t *w_path, *w_cwd;
char *path = getenv ("PATH");
wchar_t *w_path = NULL, *w_cwd;
debug_printf ("Cygwin charset changed from %s to %s",
cygheap->locale.charset, __locale_charset ());
/* Fetch CWD and PATH and convert to wchar_t in previous charset. */
w_path = tp.w_get ();
sys_mbstowcs (w_path, 32768, getenv ("PATH"));
/* Fetch PATH and CWD and convert to wchar_t in previous charset. */
if (path && *path) /* $PATH can be potentially unset. */
{
w_path = tp.w_get ();
sys_mbstowcs (w_path, 32768, path);
}
w_cwd = tp.w_get ();
cwdstuff::cwd_lock.acquire ();
sys_mbstowcs (w_cwd, 32768, cygheap->cwd.get_posix ());
@ -4259,9 +4263,12 @@ internal_setlocale ()
/* Restore CWD and PATH in new charset. */
cygheap->cwd.reset_posix (w_cwd);
cwdstuff::cwd_lock.release ();
char *c_path = tp.c_get ();
sys_wcstombs (c_path, 32768, w_path);
setenv ("PATH", c_path, 1);
if (w_path)
{
char *c_path = tp.c_get ();
sys_wcstombs (c_path, 32768, w_path);
setenv ("PATH", c_path, 1);
}
}
/* Called from dll_crt0_1, before calling the application's main().