glong i, ulen;
gchar *utf8;
- ustr = g_utf8_to_ucs4 (str, (glong) len, NULL, &ulen, NULL);
+ ustr = g_utf8_to_ucs4_fast (str, (glong) len, &ulen);
for (i = 0; i < ulen; i++)
ustr[i] = upper ? g_unichar_toupper (ustr[i]) : g_unichar_tolower (ustr[i]);
utf8 = g_ucs4_to_utf8 (ustr, ulen, NULL, NULL, NULL);
/* no fall-through in this inner switch */
switch (*inptr) {
- case 0xE0: if (c < 0xA0) return FALSE;
- case 0xED: if (c > 0x9F) return FALSE;
+ case 0xE0: if (c < 0xA0) return FALSE; break;
+ case 0xED: if (c > 0x9F) return FALSE; break;
case 0xEF: if (c == 0xB7 && (ptr[1] > 0x8F && ptr[1] < 0xB0)) return FALSE;
if (c == 0xBF && (ptr[1] == 0xBE || ptr[1] == 0xBF)) return FALSE;
- case 0xF0: if (c < 0x90) return FALSE;
- case 0xF4: if (c > 0x8F) return FALSE;
- default: if (c < 0x80) return FALSE;
+ break;
+ case 0xF0: if (c < 0x90) return FALSE; break;
+ case 0xF4: if (c > 0x8F) return FALSE; break;
+ default: if (c < 0x80) return FALSE; break;
}
case 1: if (*inptr >= 0x80 && *inptr < 0xC2) return FALSE;
}
g_utf8_strlen (const gchar *str, gssize max_len)
{
const guchar *inptr = (const guchar *) str;
- glong len = 0, n;
+ glong clen = 0, len = 0, n;
if (max_len == 0)
return 0;
if (max_len < 0) {
- while (*inptr)
+ while (*inptr) {
inptr += g_utf8_jump_table[*inptr];
-
- return inptr - (const guchar *) str;
+ len++;
+ }
} else {
while (len < max_len && *inptr) {
n = g_utf8_jump_table[*inptr];
- if ((len + n) > max_len)
+ if ((clen + n) > max_len)
break;
inptr += n;
- len += n;
+ clen += n;
+ len++;
}
-
- return len;
}
+
+ return len;
}
gunichar