simplify/optimize iconv utf-8 case
authorRich Felker <dalias@aerifal.cx>
Fri, 10 Nov 2017 18:40:12 +0000 (13:40 -0500)
committerRich Felker <dalias@aerifal.cx>
Fri, 10 Nov 2017 18:40:12 +0000 (13:40 -0500)
the special case where mbrtowc returns 0 but consumed 1 byte of input
does not need to be considered, because the short-circuit for low
bytes already covered that case.

src/locale/iconv.c

index af0d8283c180f4d92fbc2e3379942a3434c0f94f..fd51b73e86da1adbd5789d9bbbeb0008b5a80051 100644 (file)
@@ -195,11 +195,10 @@ size_t iconv(iconv_t cd, char **restrict in, size_t *restrict inb, char **restri
 
                switch (type) {
                case UTF_8:
-                       if (c < 128) break; // optimization
+                       if (c < 128) break;
                        l = mbrtowc_utf8(&wc, *in, *inb, &st);
-                       if (!l) l++;
-                       else if (l == (size_t)-1) goto ilseq;
-                       else if (l == (size_t)-2) goto starved;
+                       if (l == (size_t)-1) goto ilseq;
+                       if (l == (size_t)-2) goto starved;
                        c = wc;
                        break;
                case US_ASCII: