bin/114498: [PATCH] bug in wall makes it skip characters
Niclas Zeising
niclas.zeising at gmail.com
Wed Jul 11 20:00:20 UTC 2007
The following reply was made to PR bin/114498; it has been noted by GNATS.
From: Niclas Zeising <niclas.zeising at gmail.com>
To: FreeBSD-gnats-submit at FreeBSD.org, freebsd-bugs at FreeBSD.org
Cc:
Subject: Re: bin/114498: [PATCH] bug in wall makes it skip characters
Date: Wed, 11 Jul 2007 20:45:52 +0200
This is a multi-part message in MIME format.
--------------080209060103050402050605
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
FreeBSD-gnats-submit at FreeBSD.org wrote:
> Thank you very much for your problem report.
> It has the internal identification `bin/114498'.
> The individual assigned to look at your
> report is: freebsd-bugs.
>
> You can access the state of your problem report at any time
> via this link:
>
> http://www.freebsd.org/cgi/query-pr.cgi?pr=114498
>
>> Category: bin
>> Responsible: freebsd-bugs
>> Synopsis: [PATCH] bug in wall makes it skip characters
>> Arrival-Date: Wed Jul 11 13:20:02 GMT 2007
>
After reviewing the patch i noticed I had forgotten to remove two
comments I kept during the rewrite, so I've made a new patch. The patch
is only for wall.c, Makefile is fine as it is in the patch.
Regards!
//Niclas
--------------080209060103050402050605
Content-Type: text/plain;
name="wall.c.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="wall.c.diff"
--- src/usr.bin/wall/wall.c.orig 2007-07-11 20:40:25.000000000 +0200
+++ src/usr.bin/wall/wall.c 2007-07-11 17:33:23.000000000 +0200
@@ -193,10 +193,10 @@
exit(1);
}
-void
+static void
makemsg(char *fname)
{
- int cnt;
+ int cnt = 0;
unsigned char ch;
struct tm *lt;
struct passwd *pw;
@@ -251,12 +251,14 @@
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) {
- if (ch == '\r') {
+
+ while (fgets(lbuf, sizeof(lbuf), stdin)) {
+ p = lbuf;
+ while ((ch = *p++) != '\0') {
+ if (ch == '\r')
cnt = 0;
- } else if (cnt == 79 || ch == '\n') {
- for (; cnt < 79; ++cnt)
+ else if (ch == '\n') {
+ for(; cnt < 79; cnt++)
putc(' ', fp);
putc('\r', fp);
putc('\n', fp);
@@ -269,13 +271,13 @@
if (ch & 0x80) {
ch &= 0x7F;
putc('M', fp);
- if (++cnt == 79) {
+ if (++cnt >= 79) {
putc('\r', fp);
putc('\n', fp);
cnt = 0;
}
putc('-', fp);
- if (++cnt == 79) {
+ if (++cnt >= 79) {
putc('\r', fp);
putc('\n', fp);
cnt = 0;
@@ -284,17 +286,28 @@
if (iscntrl(ch)) {
ch ^= 040;
putc('^', fp);
- if (++cnt == 79) {
+ if (++cnt >= 79) {
putc('\r', fp);
putc('\n', fp);
cnt = 0;
}
}
putc(ch, fp);
+ if (++cnt >= 79) {
+ putc('\r', fp);
+ putc('\n', fp);
+ cnt = 0;
+ }
} else {
putc(ch, fp);
+ if (++cnt >= 79) {
+ putc('\r', fp);
+ putc('\n', fp);
+ cnt = 0;
+ }
}
}
+ }
(void)fprintf(fp, "%79s\r\n", " ");
rewind(fp);
--------------080209060103050402050605--
More information about the freebsd-bugs
mailing list