1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-02 10:01:11 +02:00

zsh-workers/8997

This commit is contained in:
Tanaka Akira 1999-12-10 21:40:57 +00:00
parent 3b4009cd53
commit 5a18eede08
3 changed files with 34 additions and 23 deletions

View file

@ -645,13 +645,13 @@ set_pwd_env(void)
if (!(pm->flags & PM_EXPORTED) &&
(!pm->level || (isset(ALLEXPORT) && !pm->old))) {
pm->flags |= PM_EXPORTED;
pm->env = addenv("PWD", pwd);
pm->env = addenv("PWD", pwd, pm->flags);
}
pm = (Param) paramtab->getnode(paramtab, "OLDPWD");
if (!(pm->flags & PM_EXPORTED) &&
(!pm->level || (isset(ALLEXPORT) && !pm->old))) {
pm->flags |= PM_EXPORTED;
pm->env = addenv("OLDPWD", oldpwd);
pm->env = addenv("OLDPWD", oldpwd, pm->flags);
}
}
@ -1621,7 +1621,7 @@ typeset_single(char *cname, char *pname, Param pm, int func,
if (!(pm->flags & (PM_ARRAY|PM_HASHED))) {
if (pm->flags & PM_EXPORTED) {
if (!(pm->flags & PM_UNSET) && !pm->env && !value)
pm->env = addenv(pname, getsparam(pname));
pm->env = addenv(pname, getsparam(pname), pm->flags);
} else if (pm->env &&
(!pm->level || (isset(ALLEXPORT) && !pm->old))) {
delenv(pm->env);

View file

@ -2217,7 +2217,7 @@ restore_params(LinkList restorelist, LinkList removelist)
} else
paramtab->addnode(paramtab, pm->nam, pm);
if ((pm->flags & PM_EXPORTED) && ((s = getsparam(pm->nam))))
pm->env = addenv(pm->nam, s);
pm->env = addenv(pm->nam, s, pm->flags);
}
}
}

View file

@ -510,7 +510,8 @@ createparamtable(void)
pm->env = *envp++ = ztrdup(*envp2);
*envp = NULL;
if (pm->flags & PM_SPECIAL)
pm->env = replenv(pm->env, getsparam(pm->nam));
pm->env = replenv(pm->env, getsparam(pm->nam),
pm->flags);
}
}
*str = '=';
@ -522,18 +523,18 @@ createparamtable(void)
pm = (Param) paramtab->getnode(paramtab, "HOME");
if (!(pm->flags & PM_EXPORTED)) {
pm->flags |= PM_EXPORTED;
pm->env = addenv("HOME", home);
pm->env = addenv("HOME", home, pm->flags);
}
pm = (Param) paramtab->getnode(paramtab, "LOGNAME");
if (!(pm->flags & PM_EXPORTED)) {
pm->flags |= PM_EXPORTED;
pm->env = addenv("LOGNAME", pm->u.str);
pm->env = addenv("LOGNAME", pm->u.str, pm->flags);
}
pm = (Param) paramtab->getnode(paramtab, "SHLVL");
if (!(pm->flags & PM_EXPORTED))
pm->flags |= PM_EXPORTED;
sprintf(buf, "%d", (int)++shlvl);
pm->env = addenv("SHLVL", buf);
pm->env = addenv("SHLVL", buf, pm->flags);
/* Add the standard non-special parameters */
set_pwd_env();
@ -1506,10 +1507,10 @@ setstrvalue(Value v, char *val)
else
val = v->pm->gets.cfn(v->pm);
if (v->pm->env)
v->pm->env = replenv(v->pm->env, val);
v->pm->env = replenv(v->pm->env, val, v->pm->flags);
else {
v->pm->flags |= PM_EXPORTED;
v->pm->env = addenv(v->pm->nam, val);
v->pm->env = addenv(v->pm->nam, val, v->pm->flags);
}
}
@ -2683,13 +2684,13 @@ arrfixenv(char *s, char **t)
len_s = strlen(s);
for (ep = environ; *ep; ep++)
if (!strncmp(*ep, s, len_s) && (*ep)[len_s] == '=') {
pm->env = replenv(*ep, u);
pm->env = replenv(*ep, u, pm->flags);
return;
}
if (isset(ALLEXPORT))
pm->flags |= PM_EXPORTED;
if (pm->flags & PM_EXPORTED)
pm->env = addenv(s, u);
pm->env = addenv(s, u, pm->flags);
}
/* Given *name = "foo", it searchs the environment for string *
@ -2709,11 +2710,25 @@ zgetenv(char *name)
return NULL;
}
/**/
static void
copyenvstr(char *s, char *value, int flags)
{
while (*s++) {
if ((*s = *value++) == Meta)
*s = *value++ ^ 32;
if (flags & PM_LOWER)
*s = tulower(*s);
else if (flags & PM_UPPER)
*s = tuupper(*s);
}
}
/* Change the value of an existing environment variable */
/**/
char *
replenv(char *e, char *value)
replenv(char *e, char *value, int flags)
{
char **ep, *s;
int len_value;
@ -2726,9 +2741,7 @@ replenv(char *e, char *value)
while (*s++ != '=');
*ep = (char *) zrealloc(e, s - e + len_value + 1);
s = s - e + *ep - 1;
while (*s++)
if ((*s = *value++) == Meta)
*s = *value++ ^ 32;
copyenvstr(s, value, flags);
return *ep;
}
return NULL;
@ -2739,7 +2752,7 @@ replenv(char *e, char *value)
/**/
static char *
mkenvstr(char *name, char *value)
mkenvstr(char *name, char *value, int flags)
{
char *str, *s;
int len_name, len_value;
@ -2751,9 +2764,7 @@ mkenvstr(char *name, char *value)
strcpy(s, name);
s += len_name;
*s = '=';
while (*s++)
if ((*s = *value++) == Meta)
*s = *value++ ^ 32;
copyenvstr(s, value, flags);
return str;
}
@ -2764,7 +2775,7 @@ mkenvstr(char *name, char *value)
/**/
char *
addenv(char *name, char *value)
addenv(char *name, char *value, int flags)
{
char **ep, *s, *t;
int num_env;
@ -2775,7 +2786,7 @@ addenv(char *name, char *value)
for (s = *ep, t = name; *s && *s == *t; s++, t++);
if (*s == '=' && !*t) {
zsfree(*ep);
return *ep = mkenvstr(name, value);
return *ep = mkenvstr(name, value, flags);
}
}
@ -2785,7 +2796,7 @@ addenv(char *name, char *value)
/* Now add it at the end */
ep = environ + num_env;
*ep = mkenvstr(name, value);
*ep = mkenvstr(name, value, flags);
*(ep + 1) = NULL;
return *ep;
}