diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c index 0727b2bc2dab..ca5391d34e77 100644 --- a/usr.sbin/syslogd/syslogd.c +++ b/usr.sbin/syslogd/syslogd.c @@ -577,9 +577,14 @@ printline(hname, msg) q = line; - while ((c = *p++ & 0177) != '\0' && - q < &line[sizeof(line) - 1]) - if (iscntrl(c)) + while ((c = (unsigned char)*p++) != '\0' && + q < &line[sizeof(line) - 3]) { + if ((c & 0x80) && c < 0xA0) { + c &= 0x7F; + *q++ = 'M'; + *q++ = '-'; + } + if (isascii(c) && iscntrl(c)) { if (c == '\n') *q++ = ' '; else if (c == '\t') @@ -588,8 +593,9 @@ printline(hname, msg) *q++ = '^'; *q++ = c ^ 0100; } - else + } else *q++ = c; + } *q = '\0'; logmsg(pri, line, hname, 0);