diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-10-19 23:47:15 +0400 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-10-19 23:47:15 +0400 |
commit | 8d648dc5559eb0b9a35c8e064c674cfc720f88cb (patch) | |
tree | 94652e1d157aa33bd2094cbfda76e3b3f0701fa2 | |
parent | 9d52f5c21cfc39edba3f0b4ba841710838bb913e (diff) |
* syscalls.cc (internal_setlocale): Only convert $PATH if there is a
$PATH.
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/syscalls.cc | 21 |
2 files changed, 19 insertions, 7 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 2f35b71ab..d28435f33 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,10 @@ 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 Cygwin executables. diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index aa112c493..d9c9d596f 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -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(). |