diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/init.c | 19 | ||||
-rw-r--r-- | Src/params.c | 11 |
2 files changed, 25 insertions, 5 deletions
diff --git a/Src/init.c b/Src/init.c index adb6eb84a..ac04a90e2 100644 --- a/Src/init.c +++ b/Src/init.c @@ -798,19 +798,28 @@ setupvals(void) /* Get password entry and set info for `USERNAME' */ #ifdef HAVE_GETPWUID if ((pswd = getpwuid(cached_uid))) { + if (emulation == EMULATE_ZSH) + home = metafy(pswd->pw_dir, -1, META_DUP); cached_username = ztrdup(pswd->pw_name); - } else + } + else #endif /* HAVE_GETPWUID */ - { + { + if (emulation == EMULATE_ZSH) + home = ztrdup("/"); cached_username = ztrdup(""); } /* * Try a cheap test to see if we can initialize `PWD' from `HOME'. - * HOME must come from the environment; we're not allowed to - * set it locally. + * In non-native emulations HOME must come from the environment; + * we're not allowed to set it locally. */ - if ((ptr = getenv("HOME")) && ispwd(ptr)) + if (emulation == EMULATE_ZSH) + ptr = home; + else + ptr = getenv("HOME"); + if (ptr && ispwd(ptr)) pwd = ztrdup(ptr); else if ((ptr = zgetenv("PWD")) && (strlen(ptr) < PATH_MAX) && (ptr = metafy(ptr, -1, META_STATIC), ispwd(ptr))) diff --git a/Src/params.c b/Src/params.c index 5e4231cac..a633fb579 100644 --- a/Src/params.c +++ b/Src/params.c @@ -690,6 +690,17 @@ createparamtable(void) *envp = '\0'; opts[ALLEXPORT] = oae; + if (emulation == EMULATE_ZSH) + { + /* + * For native emulation we always set the variable home + * (see setupvals()). + */ + pm = (Param) paramtab->getnode(paramtab, "HOME"); + pm->flags &= ~PM_UNSET; + if (!(pm->flags & PM_EXPORTED)) + addenv(pm, home); + } pm = (Param) paramtab->getnode(paramtab, "LOGNAME"); if (!(pm->flags & PM_EXPORTED)) addenv(pm, pm->u.str); |