> Anyone worked out an idiom that would allow me to
> use Brdline()/Blinelen() to read a file which
> contains continuation lines?
>
> I want to read a text file which consists of lines terminated
> by newlines, but lines with leading whitespace are considered
> to be continuation lines.
>
> Brdline() is very neat allowing me to parse input lines inside the
> Biobuf buffer without copying them to "user space", however if I
> do a Brdline(), get a line and then attempt to do another Brdline()
> I am in danger of releaseing the buffer space used by the first read.
>
> I am happy if the answer is "Brdline() cannot do this", I just feel like
> I am missing a trick, and there is elegant solution.
/*
* Bgetrune seems like overkill, but avoids passing up bad runes.
*/
int
Brdlinec(Biobuf *b, char *s, char *e)
{
char *p;
int x, slash;
Rune r;
for(p = s; e-p > UTFmax+1;){
x = Bgetrune(b);
if(x == -1)
return -1;
r = x;
if(r == '\\'){
x = Bgetrune(b);
if(x == -1)
return -1;
if(x == '\n')
continue;
p += runetochar(p, &r);
r = x;
}else if(r == '\n')
break;
p += runetochar(p, r);
}
*p = 0;
return p-e;
}