1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-19 03:31:14 +02:00

22198: do always set HOME in native emulation

This commit is contained in:
Peter Stephenson 2006-02-07 11:29:30 +00:00
parent 90b6199e17
commit 30176eaf63
5 changed files with 38 additions and 9 deletions

View file

@ -1,3 +1,8 @@
2006-02-07 Peter Stephenson <pws@csr.com>
* 22198: README, Src/init.c, Src/params.c, Doc/Zsh/params.yo:
modify 22195 so that HOME gets set as before in native emulation.
2006-02-06 Wayne Davison <wayned@users.sourceforge.net> 2006-02-06 Wayne Davison <wayned@users.sourceforge.net>
* unposted: Src/Modules/newuser.c: fixed return-without-value * unposted: Src/Modules/newuser.c: fixed return-without-value
@ -5,7 +10,7 @@
2006-02-06 Peter Stephenson <pws@csr.com> 2006-02-06 Peter Stephenson <pws@csr.com>
* 22196: INSTALL, README, Config/version.mk: developement * 22196: INSTALL, README, Config/version.mk: development
version 4.3.0-dev-3 version 4.3.0-dev-3
* 22195: README, Src/init.c, Src/params.c, Src/subst.c, * 22195: README, Src/init.c, Src/params.c, Src/subst.c,

View file

@ -805,7 +805,10 @@ cushion for saving duplicated history events.
) )
vindex(HOME) vindex(HOME)
item(tt(HOME) <S>)( item(tt(HOME) <S>)(
The default argument for the tt(cd) command. The default argument for the tt(cd) command. This is not set automatically
by the shell in tt(sh), tt(ksh) or tt(csh) emulation, but it is typically
present in the environment anyway, and if it becomes set it has its usual
special behaviour.
) )
vindex(IFS) vindex(IFS)
item(tt(IFS) <S>)( item(tt(IFS) <S>)(

5
README
View file

@ -31,8 +31,9 @@ variables as an error, so can still return status 0 (depending on the
handling of other arguments). This appears to be the standard shell handling of other arguments). This appears to be the standard shell
behaviour. behaviour.
The variable HOME is no longer set by the shell; it must be present The variable HOME is no longer set by the shell if zsh is emulating any
in the environment. It is valid for the variable to be unset. other shell at startup; it must be present in the environment or set
subsequently by the user. It is valid for the variable to be unset.
Zsh has previously been lax about whether it allows octets with the Zsh has previously been lax about whether it allows octets with the
top bit set to be part of a shell identifier. With --enable-multibyte set, top bit set to be part of a shell identifier. With --enable-multibyte set,

View file

@ -798,19 +798,28 @@ setupvals(void)
/* Get password entry and set info for `USERNAME' */ /* Get password entry and set info for `USERNAME' */
#ifdef HAVE_GETPWUID #ifdef HAVE_GETPWUID
if ((pswd = getpwuid(cached_uid))) { if ((pswd = getpwuid(cached_uid))) {
if (emulation == EMULATE_ZSH)
home = metafy(pswd->pw_dir, -1, META_DUP);
cached_username = ztrdup(pswd->pw_name); cached_username = ztrdup(pswd->pw_name);
} else }
else
#endif /* HAVE_GETPWUID */ #endif /* HAVE_GETPWUID */
{ {
if (emulation == EMULATE_ZSH)
home = ztrdup("/");
cached_username = ztrdup(""); cached_username = ztrdup("");
} }
/* /*
* Try a cheap test to see if we can initialize `PWD' from `HOME'. * Try a cheap test to see if we can initialize `PWD' from `HOME'.
* HOME must come from the environment; we're not allowed to * In non-native emulations HOME must come from the environment;
* set it locally. * 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); pwd = ztrdup(ptr);
else if ((ptr = zgetenv("PWD")) && (strlen(ptr) < PATH_MAX) && else if ((ptr = zgetenv("PWD")) && (strlen(ptr) < PATH_MAX) &&
(ptr = metafy(ptr, -1, META_STATIC), ispwd(ptr))) (ptr = metafy(ptr, -1, META_STATIC), ispwd(ptr)))

View file

@ -690,6 +690,17 @@ createparamtable(void)
*envp = '\0'; *envp = '\0';
opts[ALLEXPORT] = oae; 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"); pm = (Param) paramtab->getnode(paramtab, "LOGNAME");
if (!(pm->flags & PM_EXPORTED)) if (!(pm->flags & PM_EXPORTED))
addenv(pm, pm->u.str); addenv(pm, pm->u.str);