On Sat, 26 Sep 1998, James Turner wrote: > Okay I've found the problem. It's a bug in the interfacing with > Circle, not explicitly in the client or server (or Circle for that > matter). Here's a demonstration of the root of the issue: run circle > in the foreground, hit ctrl-z, go to a window already connected, hit > enter 50 times, go back, type "fg", and switch back to the client > window. Circle only responds to one carriage return. Now, suppose > you have an empty line in the file that is being sent. It gets > transmitted just as a "\n". But if there was a line before it, we end > up with two \n's in the buffer, which circle skips over. Not surprising - MERC etc. do the same thing, and I fixed it there - but the code in Circle is quite different. This seems to be the problem: /* find the end of this line */ while (ISNEWL(*nl_pos)) nl_pos++; It should only skip one complete newline. The problem is however, finding out what a newliny IS. It could be \n, but perhaps also \r\n or \n\r or \r. On MERC+, I skip until I get one of each or reach a non-newline. It looks something like this: got_n = got_r = FALSE; for (;d->inbuf[i] == '\r' || d->inbuf[i] == '\n';i++) { if (d->inbuf[i] == '\r' && got_r++) break; else if (d->inbuf[i] == '\n' && got_n++) break; } -- ============================================================================= <erwin@andreasen.com> Herlev, Denmark UNIX System Programmer <URL:http://www.abandoned.org/drylock/> <*> (not speaking for) DDE ============================================================================= +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST