Author: obrien Date: Tue Jul 12 23:48:57 2011 New Revision: 223970 URL: http://svn.freebsd.org/changeset/base/223970
Log: MFC: + r223940 (as r223969): If one's message is longer than the buffer size, then we reset 'cnt' at the wrong point and the actual column # get out of sync across the buffer size. + r175346: Handle wrapping correctly when \r appears in the input, and don't remove the \r from the output. For lines longer than 79 characters, don't drop every 80th character. Modified: stable/7/usr.bin/wall/wall.c Directory Properties: stable/7/usr.bin/wall/ (props changed) Modified: stable/7/usr.bin/wall/wall.c ============================================================================== --- stable/7/usr.bin/wall/wall.c Tue Jul 12 23:39:56 2011 (r223969) +++ stable/7/usr.bin/wall/wall.c Tue Jul 12 23:48:57 2011 (r223970) @@ -251,17 +251,26 @@ makemsg(char *fname) err(1, "can't read %s", fname); setegid(egid); } - while (fgets(lbuf, sizeof(lbuf), stdin)) - for (cnt = 0, p = lbuf; (ch = *p) != '\0'; ++p, ++cnt) { + cnt = 0; + while (fgets(lbuf, sizeof(lbuf), stdin)) { + for (p = lbuf; (ch = *p) != '\0'; ++p, ++cnt) { if (ch == '\r') { + putc('\r', fp); cnt = 0; - } else if (cnt == 79 || ch == '\n') { + continue; + } else if (ch == '\n') { for (; cnt < 79; ++cnt) putc(' ', fp); putc('\r', fp); putc('\n', fp); + break; + } + if (cnt == 79) { + putc('\r', fp); + putc('\n', fp); cnt = 0; - } else if (((ch & 0x80) && ch < 0xA0) || + } + if (((ch & 0x80) && ch < 0xA0) || /* disable upper controls */ (!isprint(ch) && !isspace(ch) && ch != '\a' && ch != '\b') @@ -290,11 +299,10 @@ makemsg(char *fname) cnt = 0; } } - putc(ch, fp); - } else { - putc(ch, fp); } + putc(ch, fp); } + } (void)fprintf(fp, "%79s\r\n", " "); rewind(fp); _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"