diff options
-rw-r--r-- | scan.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/scan.c b/scan.c index f0be7c9..906d33a 100644 --- a/scan.c +++ b/scan.c @@ -16,10 +16,14 @@ void u8putstr(FILE *out, char *s, size_t l, int pad) { - while (*s && l > 0) { + while (*s && l) { putc(*s, out); - if ((*s++ & 0xc0) != 0x80) - l--; + // elongate by utf8 overhead + if ((*s & 0xf0) == 0xf0) l += 3; + else if ((*s & 0xe0) == 0xe0) l += 2; + else if ((*s & 0xc0) == 0xc0) l += 1; + l--; + s++; } if (pad) while (l-- > 0) |