commit - c7bcd4a8a9b22a4b28136e24069279cb93b1e43d
commit + 7980a5d2a8e3c3db8ce3cd9b7a2151936faeb325
blob - 6f2ee685dcdfbd69f83b1728ef2d081304b6054f
blob + 623d2eacdcf16cff5529b37cb19d7d872c294868
--- gg.c
+++ gg.c
#include <errno.h>
#include <locale.h>
#include <string.h>
+#include <wchar.h>
enum debug {
DEBUG_NONE,
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)
{
/* 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);