diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2001-10-29 11:53:52 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2001-10-29 11:53:52 +0000 |
commit | ac19c8dcf619a7bc78490800540fe45f82aa8086 (patch) | |
tree | 14054a2364ae07bf7c2aa7cb61cc7dcbf56abab3 /winsup | |
parent | 711ded6d2866e00b42e4d7c1136b201944e16578 (diff) | |
download | newlib-ac19c8dcf619a7bc78490800540fe45f82aa8086.zip newlib-ac19c8dcf619a7bc78490800540fe45f82aa8086.tar.gz newlib-ac19c8dcf619a7bc78490800540fe45f82aa8086.tar.bz2 |
* uinfo.cc (internal_getlogin): Set environment variable $HOME
from either /etc/passwd or $HOMEDRIVE/$HOMEPATH if necessary.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/uinfo.cc | 25 |
2 files changed, 28 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 0be1193..dee6519 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2001-10-29 Corinna Vinschen <corinna@vinschen.de> + + * uinfo.cc (internal_getlogin): Set environment variable $HOME + from either /etc/passwd or $HOMEDRIVE/$HOMEPATH if necessary. + 2001-10-29 Christopher Faylor <cgf@redhat.com> * fhandler.h (fhandler_serial::fhandler_serial): Change to only accept diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc index 25994c7..29f1197 100644 --- a/winsup/cygwin/uinfo.cc +++ b/winsup/cygwin/uinfo.cc @@ -33,6 +33,7 @@ details. */ struct passwd * internal_getlogin (cygheap_user &user) { + char buf[512]; char username[UNLEN + 1]; DWORD username_len = UNLEN + 1; struct passwd *pw = NULL; @@ -47,7 +48,6 @@ internal_getlogin (cygheap_user &user) { LPWKSTA_USER_INFO_1 wui; NET_API_STATUS ret; - char buf[512]; char *env; user.set_logsrv (NULL); @@ -212,7 +212,28 @@ internal_getlogin (cygheap_user &user) } } debug_printf ("Cygwins Username: %s", user.name ()); - return pw ?: getpwnam(user.name ()); + if (!pw) + pw = getpwnam(user.name ()); + if (!getenv ("HOME")) + { + const char *homedrive, *homepath; + if (pw && pw->pw_dir && *pw->pw_dir) + { + setenv ("HOME", pw->pw_dir, 1); + debug_printf ("Set HOME (from /etc/passwd) to %s", pw->pw_dir); + } + else if ((homedrive = getenv ("HOMEDRIVE")) + && (homepath = getenv ("HOMEPATH"))) + { + char home[MAX_PATH]; + strcpy (buf, homedrive); + strcat (buf, homepath); + cygwin_conv_to_full_posix_path (buf, home); + setenv ("HOME", home, 1); + debug_printf ("Set HOME (from HOMEDRIVE/HOMEPATH) to %s", home); + } + } + return pw; } void |