- 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 *);