]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcstr.c
[fcxml.c] Embed a static 64-byte attr buffer in FcPStack
[fontconfig.git] / src / fcstr.c
index dc7807d2efe199d0e123545958f7a0f6a13f88d1..bebf8ce7004f6d338080993a090e85dfce030b21 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->buf_static;
+       buf->size = sizeof (buf->buf_static);
+    }
     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);
@@ -744,6 +754,19 @@ FcStrBufDone (FcStrBuf *buf)
     return ret;
 }
 
+FcChar8 *
+FcStrBufDoneStatic (FcStrBuf *buf)
+{
+    FcChar8 *ret;
+
+    FcStrBufChar (buf, '\0');
+
+    if (buf->failed)
+       return NULL;
+
+    return buf->buf;
+}
+
 FcBool
 FcStrBufChar (FcStrBuf *buf, FcChar8 c)
 {
@@ -752,6 +775,9 @@ FcStrBufChar (FcStrBuf *buf, FcChar8 c)
        FcChar8     *new;
        int         size;
 
+       if (buf->failed)
+           return FcFalse;
+
        if (buf->allocated)
        {
            size = buf->size * 2;
@@ -943,7 +969,13 @@ FcConvertDosPath (char *str)
   char *dest = str;
   char *end = str + len;
   char last = 0;
-  
+
+  if (*p == '\\')
+    {
+      *p = '/';
+      p++;
+      dest++;
+    }
   while (p < end)
     {
       if (*p == '\\')