mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
mk: treat X= as empty list in rc shell
This brings mk's behavior when using rc in line with Plan 9's. The existing code is for Unix environment data structures but also was assuming Unix shell semantics where empty and missing variables are mostly equivalent. The Plan 9 code (/sys/src/cmd/mk/plan9.c in the distribution) explicitly removes /env/name (creating an empty list) when the value is missing or an empty string. Fixes #255.
This commit is contained in:
parent
9962d916e8
commit
6c17f63090
1 changed files with 12 additions and 6 deletions
|
@ -53,20 +53,26 @@ readenv(void)
|
|||
void
|
||||
exportenv(Envy *e, Shell *sh)
|
||||
{
|
||||
int i;
|
||||
int w, n;
|
||||
char **p;
|
||||
Envy *e1;
|
||||
static char buf[16384];
|
||||
|
||||
p = 0;
|
||||
for(i = 0; e->name; e++, i++) {
|
||||
p = (char**) Realloc(p, (i+2)*sizeof(char*));
|
||||
n = 0;
|
||||
for(e1 = e; e1->name; e1++)
|
||||
n++;
|
||||
p = Malloc((n+1)*sizeof(char*));
|
||||
w = 0;
|
||||
for(; e->name; e++) {
|
||||
if(sh == &rcshell && (e->values == 0 || e->values->s == 0 || e->values->s[0] == 0))
|
||||
continue; /* do not write empty string for empty list */
|
||||
if(e->values)
|
||||
snprint(buf, sizeof buf, "%s=%s", e->name, wtos(e->values, sh->iws));
|
||||
else
|
||||
snprint(buf, sizeof buf, "%s=", e->name);
|
||||
p[i] = strdup(buf);
|
||||
p[w++] = strdup(buf);
|
||||
}
|
||||
p[i] = 0;
|
||||
p[w] = 0;
|
||||
environ = p;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue