aboutsummaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2001-10-29 11:53:52 +0000
committerCorinna Vinschen <corinna@vinschen.de>2001-10-29 11:53:52 +0000
commitac19c8dcf619a7bc78490800540fe45f82aa8086 (patch)
tree14054a2364ae07bf7c2aa7cb61cc7dcbf56abab3 /winsup
parent711ded6d2866e00b42e4d7c1136b201944e16578 (diff)
downloadnewlib-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/ChangeLog5
-rw-r--r--winsup/cygwin/uinfo.cc25
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