- b[0] = IAC;
- b[1] = SB;
- b[2] = TELOPT_NAWS;
- b[3] = telnet->term_width >> 8;
- b[4] = telnet->term_width & 0xFF;
- b[5] = telnet->term_height >> 8;
- b[6] = telnet->term_height & 0xFF;
- b[7] = IAC;
- b[8] = SE;
- telnet->bufsize = sk_write(telnet->s, b, 9);
+ n = 0;
+ b[n++] = IAC;
+ b[n++] = SB;
+ b[n++] = TELOPT_NAWS;
+ b[n++] = telnet->term_width >> 8;
+ if (b[n-1] == IAC) b[n++] = IAC; /* duplicate any IAC byte occurs */
+ b[n++] = telnet->term_width & 0xFF;
+ if (b[n-1] == IAC) b[n++] = IAC; /* duplicate any IAC byte occurs */
+ b[n++] = telnet->term_height >> 8;
+ if (b[n-1] == IAC) b[n++] = IAC; /* duplicate any IAC byte occurs */
+ b[n++] = telnet->term_height & 0xFF;
+ if (b[n-1] == IAC) b[n++] = IAC; /* duplicate any IAC byte occurs */
+ b[n++] = IAC;
+ b[n++] = SE;
+ telnet->bufsize = sk_write(telnet->s, b, n);