]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcstr.c
Merge with HEAD and finish the GCC 4 cleanups (no more warnings!)
[fontconfig.git] / src / fcstr.c
index 61f1897d9ee11e2dc2aa8b05a27f64b27de8b554..fb715a46c73a1f03eb11aa973f361e4742665c39 100644 (file)
@@ -83,7 +83,7 @@ FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w)
 {
     w->src = src;
     w->read = 0;
-    w->len = strlen (src);
+    w->len = strlen ((char *) src);
 }
 
 static FcChar8
@@ -92,7 +92,7 @@ FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r)
     FcChar32   ucs4;
     int                slen;
 
-    slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, w->len);
+    slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, w->len + 1);
     if (slen <= 0)
        return r;
     if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR)
@@ -188,6 +188,25 @@ FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w)
     return r;
 }
 
+FcChar8 *
+FcStrDowncase (const FcChar8 *s)
+{
+    FcCaseWalker    w;
+    int                    len = 0;
+    FcChar8        *dst, *d;
+
+    FcStrCaseWalkerInit (s, &w);
+    while (FcStrCaseWalkerNext (&w))
+       len++;
+    d = dst = malloc (len + 1);
+    if (!d)
+       return 0;
+    FcMemAlloc (FC_MEM_STRING, len + 1);
+    FcStrCaseWalkerInit (s, &w);
+    while ((*d++ = FcStrCaseWalkerNext (&w)));
+    return dst;
+}
+
 int
 FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
 {