On Jan 8, Steinar H. Gunderson ([EMAIL PROTECTED]) wrote: > On Sat, Jan 07, 2006 at 11:05:59PM +0100, Steinar H. Gunderson wrote: > > I have no idea what the resolution would be, but this should IMHO be fixed > > in > > stable; onsgmls is rather broken as long as it can't read properly from a > > line-buffered pipe. :-) > > I've debugged this a bit, even though I have a hard time grokking opensp's > insanely complex input layer (stdio or iostreams was obviously too standard). > > The bug seems to manifest itself if and only if a tag spans two read() > buffers, like this imaginary strace fragment: > > read(0, "(data here)<span>xxxx", 4096) = 4096 > read(0, "xxxx</span>(more data)", 4096) = 512 > > This explains the different behaviour with regard to stdin redirection, pipes > etc. -- opensp simply uses different block sizes in those cases (4kB vs. 8kB > vs. 32kB, AFAICS). > > You're right in that 1.5.2 fixes the problem, but it might be by accident -- > if I compile it on sarge it works, but if I drop --disable-dtddecl the bug is > back again. > > FWIW, I've run it through valgrind, but can't find any errors.
Thanks for digging into this and finding that the bug still exists if --disable-dtddecl is dropped. I'll also keep looking into it and see what I can find. As for the "insanely complex input layer" and "standard" - this code was probably written a decade ago, so my guess is that what is standard now might not even have existed in most C++ compilers back then. :-) -- Neil Roeth -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]