]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcstr.c
2006-04-27 Paolo Borelli (pborelli@katamail.com) reviewed by: plam
[fontconfig.git] / src / fcstr.c
index 730e44061eecfaa475bf6a598bc1a42a70a22c06..5d1961c3af47ee0f74857d6ed7df4e9cea976cfc 100644 (file)
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include "fcint.h"
 #include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
-#include "fcint.h"
 
 FcChar8 *
 FcStrCopy (const FcChar8 *s)
 {
-    FcChar8    *r;
+    int     len;
+    FcChar8 *r;
 
     if (!s)
        return 0;
-    r = (FcChar8 *) malloc (strlen ((char *) s) + 1);
+    len = strlen ((char *) s) + 1;
+    r = (FcChar8 *) malloc (len);
     if (!r)
        return 0;
-    FcMemAlloc (FC_MEM_STRING, strlen ((char *) s) + 1);
-    strcpy ((char *) r, (char *) s);
+    FcMemAlloc (FC_MEM_STRING, len);
+    memcpy (r, s, len);
     return r;
 }
 
@@ -74,7 +76,6 @@ FcStrFree (FcChar8 *s)
 typedef struct _FcCaseWalker {
     const FcChar8   *read;
     const FcChar8   *src;
-    int                    len;
     FcChar8        utf8[FC_MAX_CASE_FOLD_CHARS + 1];
 } FcCaseWalker;
 
@@ -83,7 +84,6 @@ FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w)
 {
     w->src = src;
     w->read = 0;
-    w->len = strlen (src);
 }
 
 static FcChar8
@@ -91,8 +91,9 @@ FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r)
 {
     FcChar32   ucs4;
     int                slen;
+    int                len = strlen((char*)w->src);
 
-    slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, w->len + 1);
+    slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, len + 1);
     if (slen <= 0)
        return r;
     if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR)
@@ -131,7 +132,6 @@ FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r)
                
                /* consume rest of src utf-8 bytes */
                w->src += slen - 1;
-               w->len -= slen - 1;
                
                /* read from temp buffer */
                w->utf8[dlen] = '\0';
@@ -155,7 +155,6 @@ FcStrCaseWalkerNext (FcCaseWalker *w)
        w->read = 0;
     }
     r = *w->src++;
-    --w->len;
     
     if ((r & 0xc0) == 0xc0)
        return FcStrCaseWalkerLong (w, r);
@@ -178,7 +177,6 @@ FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w)
     do
     {
        r = *w->src++;
-       --w->len;
     } while (r == ' ');
     
     if ((r & 0xc0) == 0xc0)
@@ -453,8 +451,7 @@ again:
        ++ s1;
        ++ s2;
     }
-
-    return 0;
+    /* never reached. */
 }
 
 int
@@ -711,7 +708,7 @@ FcStrBufChar (FcStrBuf *buf, FcChar8 c)
        }
        else
        {
-           size = buf->size + 1024;
+           size = buf->size + 64;
            new = malloc (size);
            if (new)
            {
@@ -785,7 +782,7 @@ FcStrCopyFilename (const FcChar8 *s)
        if (!new)
            return 0;
        FcMemAlloc (FC_MEM_STRING, size);
-       strcpy ((char *) new, (const char *) s);
+       memcpy (new, s, size);
     }
     return new;
 }