From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: From: erik quanstrom Date: Tue, 17 Mar 2009 18:43:05 -0400 To: 9fans@9fans.net In-Reply-To: <5d375e920903171527u7560bd95r954c28806f5f3697@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: Re: [9fans] Strange rc bug for the 9fans bug-squashing squad Topicbox-Message-UUID: bd64533a-ead4-11e9-9d60-3106f5b1d025 On Tue Mar 17 18:29:14 EDT 2009, uriel99@gmail.com wrote: > Thanks martin for your analysis, this makes some sense to me, but as I > pointed out, even setting ifs to () doesn't solve the issue, so it > would be nice to find a solution to this. > > Right now having the output of `{} corrupted can be quite inconvenient... it is unreasonable to expect to be able to generate tokens that are bigger than 8k. however, the '8' should not be dropped. i would think this small change would be worth consideration. ; diffy -c havefork.c /n/dump/2009/0317/sys/src/cmd/rc/havefork.c:74,80 - havefork.c:74,80 Xbackq(void) { char wd[8193]; - int c; + int c, trunc; char *s, *ewd=&wd[8192], *stop; struct io *f; var *ifs = vlook("ifs"); /n/dump/2009/0317/sys/src/cmd/rc/havefork.c:105,113 - havefork.c:105,116 while((c = rchr(f))!=EOF){ if(strchr(stop, c) || s==ewd){ if(s!=wd){ + trunc = s == ewd; *s='\0'; v = newword(wd, v); s = wd; + if(trunc) + *s++ = c; } } else *s++=c; - erik