Extract the SGEN debugging code into a separate file.
[mono.git] / eglib / src / gutf8.c
index c151e1f0506180b57e96cedde4c7edbde590191a..052229d52741850a9b4a98d8a153e5b223bcb368 100644 (file)
@@ -36,7 +36,7 @@ utf8_case_conv (const gchar *str, gssize len, gboolean upper)
        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);
@@ -85,13 +85,14 @@ utf8_validate (const unsigned char *inptr, size_t len)
                
                /* 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;
        }
@@ -226,28 +227,29 @@ glong
 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