]> git.wh0rd.org - fontconfig.git/commitdiff
[fcxml] Don't allocate attr array if there are no attributes
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 12 Mar 2009 13:27:20 +0000 (09:27 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 12 Mar 2009 17:14:37 +0000 (13:14 -0400)
Reduces number of mallocs from FcConfigSaveAttr() in my small test
from over 900 down to 157.

src/fcxml.c

index f60e24835936c25b1871d39daedc0819f8e952bf..ccc9c194d4463e6803de95f088a99dfe38a41ec1 100644 (file)
@@ -939,9 +939,14 @@ FcConfigSaveAttr (const XML_Char **attr)
     slen = 0;
     for (i = 0; attr[i]; i++)
        slen += strlen ((char *) attr[i]) + 1;
+    if (i == 0)
+       return 0;
     new = malloc ((i + 1) * sizeof (FcChar8 *) + slen);
     if (!new)
+    {
+       FcConfigMessage (0, FcSevereError, "out of memory");
        return 0;
+    }
     FcMemAlloc (FC_MEM_ATTR, 1);    /* size is too expensive */
     s = (FcChar8 *) (new + (i + 1));
     for (i = 0; attr[i]; i++)
@@ -964,19 +969,7 @@ FcPStackPush (FcConfigParse *parse, FcElement element, const XML_Char **attr)
     FcMemAlloc (FC_MEM_PSTACK, sizeof (FcPStack));
     new->prev = parse->pstack;
     new->element = element;
-    if (attr)
-    {
-       new->attr = FcConfigSaveAttr (attr);
-       if (!new->attr)
-       {
-           FcConfigMessage (parse, FcSevereError, "out of memory");
-           FcMemFree (FC_MEM_PSTACK, sizeof (FcPStack));
-           free (new);
-           return FcFalse;
-       }
-    }
-    else
-       new->attr = 0;
+    new->attr = FcConfigSaveAttr (attr);
     FcStrBufInit (&new->str, 0, 0);
     parse->pstack = new;
     return FcTrue;