=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/write/write.c,v retrieving revision 1.32 retrieving revision 1.33 diff -c -r1.32 -r1.33 *** src/usr.bin/write/write.c 2015/10/20 20:21:18 1.32 --- src/usr.bin/write/write.c 2016/02/05 19:00:39 1.33 *************** *** 1,4 **** ! /* $OpenBSD: write.c,v 1.32 2015/10/20 20:21:18 bluhm Exp $ */ /* $NetBSD: write.c,v 1.5 1995/08/31 21:48:32 jtc Exp $ */ /* --- 1,4 ---- ! /* $OpenBSD: write.c,v 1.33 2016/02/05 19:00:39 martijn Exp $ */ /* $NetBSD: write.c,v 1.5 1995/08/31 21:48:32 jtc Exp $ */ /* *************** *** 34,53 **** */ #include #include #include #include #include - #include #include - #include - #include - #include #include - #include #include - #include - #include void done(int sig); void do_write(char *, char *, uid_t); --- 34,53 ---- */ #include + #include + #include + #include + #include + #include + #include + #include #include #include #include #include #include #include void done(int sig); void do_write(char *, char *, uid_t); *************** *** 55,60 **** --- 55,61 ---- void search_utmp(char *, char *, int, char *, uid_t); int term_chk(char *, int *, time_t *, int); int utmp_chk(char *, char *); + static int isu8cont(unsigned char c); int main(int argc, char *argv[]) *************** *** 296,319 **** void wr_fputs(char *s) { - u_char c; - char visout[5], *s2; #define PUTC(c) if (putchar(c) == EOF) goto err; for (; *s != '\0'; ++s) { ! c = toascii(*s); ! if (c == '\n') { PUTC('\r'); PUTC('\n'); continue; } ! vis(visout, c, VIS_SAFE|VIS_NOSLASH, s[1]); ! for (s2 = visout; *s2; s2++) ! PUTC(*s2); } return; err: err(1, NULL); #undef PUTC } --- 297,328 ---- void wr_fputs(char *s) { #define PUTC(c) if (putchar(c) == EOF) goto err; for (; *s != '\0'; ++s) { ! if (*s == '\n') { PUTC('\r'); PUTC('\n'); continue; } ! if (isu8cont(*s)) ! continue; ! if (isprint(*s) || isspace(*s) || *s == '\a') { ! PUTC(*s); ! } else { ! PUTC('?'); ! } ! } return; err: err(1, NULL); #undef PUTC + } + + static int + isu8cont(unsigned char c) + { + return (c & (0x80 | 0x40)) == 0x80; }