]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcstr.c
[fcstr.c] Embed a static 64-byte buffer in FcStrBuf
[fontconfig.git] / src / fcstr.c
index 2f2cd4dfd0dc6b2c6857d4bd0497006e7a76b250..4fbb1a216ea88fd551027b26d25cdea10df0cc17 100644 (file)
@@ -710,11 +710,18 @@ FcUtf16Len (const FcChar8   *string,
 void
 FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size)
 {
-    buf->buf = init;
+    if (init)
+    {
+       buf->buf = init;
+       buf->size = size;
+    } else
+    {
+       buf->buf = buf->static_buf;
+       buf->size = sizeof (buf->static_buf);
+    }
     buf->allocated = FcFalse;
     buf->failed = FcFalse;
     buf->len = 0;
-    buf->size = size;
 }
 
 void
@@ -733,7 +740,10 @@ FcStrBufDone (FcStrBuf *buf)
 {
     FcChar8 *ret;
 
-    ret = malloc (buf->len + 1);
+    if (buf->failed)
+       ret = NULL;
+    else
+       ret = malloc (buf->len + 1);
     if (ret)
     {
        FcMemAlloc (FC_MEM_STRING, buf->len + 1);
@@ -752,6 +762,9 @@ FcStrBufChar (FcStrBuf *buf, FcChar8 c)
        FcChar8     *new;
        int         size;
 
+       if (buf->failed)
+           return FcFalse;
+
        if (buf->allocated)
        {
            size = buf->size * 2;