Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Jul 2011 23:48:58 +0000 (UTC)
From:      "David E. O'Brien" <obrien@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
Subject:   svn commit: r223970 - stable/7/usr.bin/wall
Message-ID:  <201107122348.p6CNmwpZ060346@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201107122348.p6CNmwpZ060346>