]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcfs.c
Bug 44826 - <alias> must contain only a single <family>
[fontconfig.git] / src / fcfs.c
index f362e2b428a8b2ec0fa34025c85688cf27a14ff0..6625687c19c9be40eae678648930bd7f7776b919 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $RCSId: $
+ * fontconfig/src/fcfs.c
  *
  * Copyright © 2000 Keith Packard
  *
@@ -7,23 +7,23 @@
  * documentation for any purpose is hereby granted without fee, provided that
  * the above copyright notice appear in all copies and that both that
  * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
+ * documentation, and that the name of the author(s) not be used in
  * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
+ * specific, written prior permission.  The authors make no
  * representations about the suitability of this software for any purpose.  It
  * is provided "as is" without express or implied warranty.
  *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include <stdlib.h>
 #include "fcint.h"
+#include <stdlib.h>
 
 FcFontSet *
 FcFontSetCreate (void)
@@ -61,7 +61,7 @@ FcFontSetAdd (FcFontSet *s, FcPattern *font)
 {
     FcPattern  **f;
     int                sfont;
-    
+
     if (s->nfont == s->sfont)
     {
        sfont = s->sfont + 32;
@@ -82,132 +82,54 @@ FcFontSetAdd (FcFontSet *s, FcPattern *font)
 }
 
 FcBool
-FcFontSetPrepareSerialize (FcFontSet *s)
+FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s)
 {
     int i;
 
-    for (i = 0; i < s->nfont; i++)
-       if (!FcPatternPrepareSerialize(s->fonts[i]))
-           return FcFalse;
-
-    return FcTrue;
-}
-
-FcBool
-FcFontSetSerialize (FcFontSet * s)
-{
-    int i;
-    FcPattern * p;
-
+    if (!FcSerializeAlloc (serialize, s, sizeof (FcFontSet)))
+       return FcFalse;
+    if (!FcSerializeAlloc (serialize, s->fonts, s->nfont * sizeof (FcPattern *)))
+       return FcFalse;
     for (i = 0; i < s->nfont; i++)
     {
-       p = FcPatternSerialize (s->fonts[i]);
-       if (!p) return FcFalse;
-       FcPatternDestroy (s->fonts[i]);
-
-       s->fonts[i] = p;
+       if (!FcPatternSerializeAlloc (serialize, s->fonts[i]))
+           return FcFalse;
     }
-
     return FcTrue;
 }
 
-void
-FcFontSetClearStatic (void)
-{
-    FcPatternClearStatic();
-}
-
-FcBool
-FcFontSetRead(int fd, FcConfig * config, FcCache metadata)
+FcFontSet *
+FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s)
 {
-    int i, mz, j;
-    FcPattern * buf;
-
-    lseek(fd, metadata.fontsets_offset, SEEK_SET);
-    for (i = FcSetSystem; i <= FcSetApplication; i++)
-    {
-        if (config->fonts[i])
-        {
-            if (config->fonts[i]->nfont > 0 && config->fonts[i]->fonts)
-                free (config->fonts[i]->fonts);
-            free (config->fonts[i]);
-        }
-    }
-
-    for (i = FcSetSystem; i <= FcSetApplication; i++)
-    {
-        read(fd, &mz, sizeof(int));
-        if (mz != FC_CACHE_MAGIC)
-            continue;
-
-        config->fonts[i] = malloc(sizeof(FcFontSet));
-        if (!config->fonts[i])
-            return FcFalse;
-        FcMemAlloc(FC_MEM_FONTSET, sizeof(FcFontSet));
-
-        if (read(fd, config->fonts[i], sizeof(FcFontSet)) == -1)
-            goto bail;
-        if (config->fonts[i]->sfont > 0)
-        {
-            config->fonts[i]->fonts = malloc
-                (config->fonts[i]->sfont*sizeof(FcPattern *));
-           buf = malloc (config->fonts[i]->sfont * sizeof(FcPattern));
-           if (!config->fonts[i]->fonts || !buf)
-               goto bail;
-           for (j = 0; j < config->fonts[i]->nfont; j++)
-           {
-               config->fonts[i]->fonts[j] = buf+j;
-               if (read(fd, buf+j, sizeof(FcPattern)) == -1)
-                   goto bail;
-           }
-        }
-    }
+    int                i;
+    FcFontSet  *s_serialize;
+    FcPattern  **fonts_serialize;
+    FcPattern  *p_serialize;
+
+    s_serialize = FcSerializePtr (serialize, s);
+    if (!s_serialize)
+       return NULL;
+    *s_serialize = *s;
+    s_serialize->sfont = s_serialize->nfont;
+
+    fonts_serialize = FcSerializePtr (serialize, s->fonts);
+    if (!fonts_serialize)
+       return NULL;
+    s_serialize->fonts = FcPtrToEncodedOffset (s_serialize,
+                                              fonts_serialize, FcPattern *);
 
-    return FcTrue;
- bail:
-    for (i = FcSetSystem; i <= FcSetApplication; i++)
+    for (i = 0; i < s->nfont; i++)
     {
-        if (config->fonts[i])
-        {
-            if (config->fonts[i]->fonts)
-                free (config->fonts[i]->fonts);
-            free(config->fonts[i]);
-        }
-        config->fonts[i] = 0;
+       p_serialize = FcPatternSerialize (serialize, s->fonts[i]);
+       if (!p_serialize)
+           return NULL;
+       fonts_serialize[i] = FcPtrToEncodedOffset (s_serialize,
+                                                  p_serialize,
+                                                  FcPattern);
     }
-    return FcFalse;
-}
-
-FcBool
-FcFontSetWrite(int fd, FcConfig * config, FcCache * metadata)
-{
-    int c, t, i, j;
-    int m = FC_CACHE_MAGIC, z = 0;
-
-    metadata->fontsets_offset = FcCacheNextOffset(fd);
-    lseek(fd, metadata->fontsets_offset, SEEK_SET);
-    for (i = FcSetSystem; i <= FcSetApplication; i++)
-    {
-        if (!config->fonts[i])
-        {
-            write(fd, &z, sizeof(int));
-            continue;
-        }
-        else
-            write(fd, &m, sizeof(int));
 
-        if ((c = write(fd, config->fonts[i], sizeof(FcFontSet))) == -1)
-            return FcFalse;
-        t = c;
-        if (config->fonts[i]->nfont > 0)
-        {
-           for (j = 0; j < config->fonts[i]->nfont; j++)
-           {
-               if ((c = write(fd, config->fonts[i]->fonts[j],
-                              sizeof(FcPattern))) == -1)
-                   return FcFalse;
-           }
-        }
-    }
-    return FcTrue;
+    return s_serialize;
 }
+#define __fcfs__
+#include "fcaliastail.h"
+#undef __fcfs__