commit 7980a5d2a8e3c3db8ce3cd9b7a2151936faeb325 from: Omar Polo date: Wed Oct 18 17:13:51 2023 UTC gg: print the response header for non-2x replies to standard error commit - c7bcd4a8a9b22a4b28136e24069279cb93b1e43d commit + 7980a5d2a8e3c3db8ce3cd9b7a2151936faeb325 blob - 6f2ee685dcdfbd69f83b1728ef2d081304b6054f blob + 623d2eacdcf16cff5529b37cb19d7d872c294868 --- gg.c +++ gg.c @@ -23,6 +23,7 @@ #include #include #include +#include enum debug { DEBUG_NONE, @@ -181,6 +182,26 @@ dorep(struct tls *ctx, uint8_t *buf, size_t len) return tot; } +static void +safeprint(FILE *fp, const char *str) +{ + int len; + wchar_t wc; + + for (; *str != '\0'; str += len) { + if ((len = mbtowc(&wc, str, MB_CUR_MAX)) == -1) { + mbtowc(NULL, NULL, MB_CUR_MAX); + fputc('?', fp); + len = 1; + } else if (wcwidth(wc) == -1) { + fputc('?', fp); + } else if (wc != L'\n') + putwc(wc, fp); + } + + fputc('\n', fp); +} + static int get(const char *r) { @@ -285,6 +306,10 @@ get(const char *r) /* skip the header */ t = memmem(buf, len, "\r\n", 2); assert(t != NULL); + if (code < 20 || code >= 30) { + *t = '\0'; + safeprint(stderr, buf + 3); /* skip return code */ + } t += 2; /* skip \r\n */ len -= t - buf; write(1, t, len);