/*
- * $RCSId: $
+ * fontconfig/src/fcfs.c
*
* Copyright © 2000 Keith Packard
*
* 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)
}
FcBool
-FcFontSetPrepareSerialize (FcFontSet *s)
-{
- int i;
-
- for (i = 0; i < s->nfont; i++)
- if (!FcPatternPrepareSerialize(s->fonts[i]))
- return FcFalse;
-
- return FcTrue;
-}
-
-FcBool
-FcFontSetSerialize (FcFontSet * s)
+FcFontSetSerializeAlloc (FcSerialize *serialize, const 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__