X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffcfs.c;h=6625687c19c9be40eae678648930bd7f7776b919;hb=HEAD;hp=f362e2b428a8b2ec0fa34025c85688cf27a14ff0;hpb=212c9f437e959fbdc5fe344c67b8c1cf8ca63edb;p=fontconfig.git diff --git a/src/fcfs.c b/src/fcfs.c index f362e2b..6625687 100644 --- a/src/fcfs.c +++ b/src/fcfs.c @@ -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 #include "fcint.h" +#include 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__