# HG changeset patch # User Michael Spacefalcon # Date 1383202591 0 # Node ID dfd3110d84e35fab8cadca3fbc47d32abd7e3b90 # Parent 595631eee4bcd6a2e9066553c65b8266f42755e4 fc-[ix]ram: tty pass-thru mode made binary-safe diff -r 595631eee4bc -r dfd3110d84e3 loadtools/ttypassthru.c --- a/loadtools/ttypassthru.c Thu Oct 31 05:50:06 2013 +0000 +++ b/loadtools/ttypassthru.c Thu Oct 31 06:56:31 2013 +0000 @@ -20,6 +20,35 @@ static struct termios saved_termios, my_termios; static void +safe_output(buf, cc) + u_char *buf; +{ + int i, c; + + for (i = 0; i < cc; i++) { + c = buf[i]; + if (c == '\r' || c == '\n' || c == '\t' || c == '\b') { + putchar(c); + continue; + } + if (c & 0x80) { + putchar('M'); + putchar('-'); + c &= 0x7F; + } + if (c < 0x20) { + putchar('^'); + putchar(c + '@'); + } else if (c == 0x7F) { + putchar('^'); + putchar('?'); + } else + putchar(c); + } + fflush(stdout); +} + +static void loop() { char buf[BUFSIZ]; @@ -55,7 +84,7 @@ fprintf(stderr, "EOF/error on target tty\n"); exit(1); } - write(1, buf, cc); + safe_output(buf, cc); } } }