Fix two rc fn-saving bugs mentioned on 9fans.
Also, please
rm /sys/src/cmd/rc/fmtquote.c
update /sys/src/cmd/rc/fmtquote.c
Thanks.
--
/sys/src/cmd/rc/exec.c
exec.c.orig:751,760 - /n/sources/patch/applied/rcfn/exec.c:751,762
}
deglob(runq->argv->words->word);
runq->local = newvar(strdup(runq->argv->words->word), runq->local);
- runq->local->val = copywords(runq->argv->next->words, (word *)0);
+ poplist();
+ globlist();
+ runq->local->val = runq->argv->words;
runq->local->changed = 1;
+ runq->argv->words = 0;
poplist();
- poplist();
}
void
exec.c.orig:790,795 - /n/sources/patch/applied/rcfn/exec.c:792,798
word *a;
int end;
end = runq->code[runq->pc].i;
+ globlist();
for(a = runq->argv->words;a;a = a->next){
v = gvlook(a->word);
if(v->fn)
/sys/src/cmd/rc/io.c
io.c.orig:91,97 - /n/sources/patch/applied/rcfn/io.c:91,97
pwrd(io *f, char *s)
{
char *t;
- for(t = s;*t;t++) if(!wordchr(*t)) break;
+ for(t = s;*t;t++) if(*t >= 0 && needsrcquote(*t)) break;
if(t==s || *t)
pquo(f, s);
else pstr(f, s);
/sys/src/cmd/rc/plan9.c
plan9.c.orig:275,281 - /n/sources/patch/applied/rcfn/plan9.c:275,281
else{
if(v->fn){
fd = openfd(f);
- pfmt(fd, "fn %s %s\n", v->name, v->fn[v->pc-1].s);
+ pfmt(fd, "fn %q %s\n", v->name, v->fn[v->pc-1].s);
closeio(fd);
}
close(f);
/sys/src/cmd/rc/simple.c
simple.c.orig:466,472 - /n/sources/patch/applied/rcfn/simple.c:466,472
found = 0;
v = gvlook(a->word);
if(v->fn)
- pfmt(out, "fn %s %s\n", v->name, v->fn[v->pc-1].s);
+ pfmt(out, "fn %q %s\n", v->name, v->fn[v->pc-1].s);
else{
for(bp = Builtin;bp->name;bp++)
if(strcmp(a->word, bp->name)==0){
/sys/src/cmd/rc/win32.c
win32.c.orig:211,217 - /n/sources/patch/applied/rcfn/win32.c:211,217
else{
if(v->fn){
fd = openfd(f);
- pfmt(fd, "fn %s %s\n", v->name, v->fn[v->pc-1].s);
+ pfmt(fd, "fn %q %s\n", v->name, v->fn[v->pc-1].s);
closeio(fd);
}
close(f);