commit - c4071243a591037f159e15618364521133b8d7ec
commit + 72f66c2d3ca556d35b818158e9de578c4bfa153e
blob - 74abfe17cb8fb17f73d1f321517bff13c7de83b5
blob + 549b1966ec94316d25abeb1d12047d64d9fc9ac8
--- src/cmd/rc/havefork.c
+++ src/cmd/rc/havefork.c
{
struct thread *p = runq;
char wd[8193];
- int c;
- char *s, *ewd=&wd[8192], *stop;
+ int c, n;
+ char *s, *ewd=&wd[8192], *stop, *q;
struct io *f;
var *ifs = vlook("ifs");
word *v, *nextv;
int pfd[2];
int pid;
+ Rune r;
stop = ifs->val?ifs->val->word:"";
if(pipe(pfd)<0){
Xerror("can't make pipe");
s = wd;
v = 0;
while((c = rchr(f))!=EOF){
- if(strchr(stop, c) || s==ewd){
- if(s!=wd){
- *s='\0';
- v = newword(wd, v);
- s = wd;
+ if(s != ewd) {
+ *s++ = c;
+ for(q=stop; *q; q+=n) {
+ n = chartorune(&r, q);
+ if(s-wd >= n && memcmp(s-n, q, n) == 0) {
+ s -= n;
+ goto stop;
+ }
}
+ continue;
}
- else *s++=c;
+ stop:
+ *s = '\0';
+ v = newword(wd, v);
+ s = wd;
}
if(s!=wd){
*s='\0';