fcfs.c revision a6844aab
1/* 2 * fontconfig/src/fcfs.c 3 * 4 * Copyright © 2000 Keith Packard 5 * 6 * Permission to use, copy, modify, distribute, and sell this software and its 7 * documentation for any purpose is hereby granted without fee, provided that 8 * the above copyright notice appear in all copies and that both that 9 * copyright notice and this permission notice appear in supporting 10 * documentation, and that the name of Keith Packard not be used in 11 * advertising or publicity pertaining to distribution of the software without 12 * specific, written prior permission. Keith Packard makes no 13 * representations about the suitability of this software for any purpose. It 14 * is provided "as is" without express or implied warranty. 15 * 16 * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 17 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 18 * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR 19 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 20 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 21 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 22 * PERFORMANCE OF THIS SOFTWARE. 23 */ 24 25#include "fcint.h" 26#include <stdlib.h> 27 28FcFontSet * 29FcFontSetCreate (void) 30{ 31 FcFontSet *s; 32 33 s = (FcFontSet *) malloc (sizeof (FcFontSet)); 34 if (!s) 35 return 0; 36 FcMemAlloc (FC_MEM_FONTSET, sizeof (FcFontSet)); 37 s->nfont = 0; 38 s->sfont = 0; 39 s->fonts = 0; 40 return s; 41} 42 43void 44FcFontSetDestroy (FcFontSet *s) 45{ 46 int i; 47 48 for (i = 0; i < s->nfont; i++) 49 FcPatternDestroy (s->fonts[i]); 50 if (s->fonts) 51 { 52 FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *)); 53 free (s->fonts); 54 } 55 FcMemFree (FC_MEM_FONTSET, sizeof (FcFontSet)); 56 free (s); 57} 58 59FcBool 60FcFontSetAdd (FcFontSet *s, FcPattern *font) 61{ 62 FcPattern **f; 63 int sfont; 64 65 if (s->nfont == s->sfont) 66 { 67 sfont = s->sfont + 32; 68 if (s->fonts) 69 f = (FcPattern **) realloc (s->fonts, sfont * sizeof (FcPattern *)); 70 else 71 f = (FcPattern **) malloc (sfont * sizeof (FcPattern *)); 72 if (!f) 73 return FcFalse; 74 if (s->sfont) 75 FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *)); 76 FcMemAlloc (FC_MEM_FONTPTR, sfont * sizeof (FcPattern *)); 77 s->sfont = sfont; 78 s->fonts = f; 79 } 80 s->fonts[s->nfont++] = font; 81 return FcTrue; 82} 83 84FcBool 85FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s) 86{ 87 int i; 88 89 if (!FcSerializeAlloc (serialize, s, sizeof (FcFontSet))) 90 return FcFalse; 91 if (!FcSerializeAlloc (serialize, s->fonts, s->nfont * sizeof (FcPattern *))) 92 return FcFalse; 93 for (i = 0; i < s->nfont; i++) 94 { 95 if (!FcPatternSerializeAlloc (serialize, s->fonts[i])) 96 return FcFalse; 97 } 98 return FcTrue; 99} 100 101FcFontSet * 102FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s) 103{ 104 int i; 105 FcFontSet *s_serialize; 106 FcPattern **fonts_serialize; 107 FcPattern *p_serialize; 108 109 s_serialize = FcSerializePtr (serialize, s); 110 if (!s_serialize) 111 return NULL; 112 *s_serialize = *s; 113 s_serialize->sfont = s_serialize->nfont; 114 115 fonts_serialize = FcSerializePtr (serialize, s->fonts); 116 if (!fonts_serialize) 117 return NULL; 118 s_serialize->fonts = FcPtrToEncodedOffset (s_serialize, 119 fonts_serialize, FcPattern *); 120 121 for (i = 0; i < s->nfont; i++) 122 { 123 p_serialize = FcPatternSerialize (serialize, s->fonts[i]); 124 if (!p_serialize) 125 return NULL; 126 fonts_serialize[i] = FcPtrToEncodedOffset (s_serialize, 127 p_serialize, 128 FcPattern); 129 } 130 131 return s_serialize; 132} 133#define __fcfs__ 134#include "fcaliastail.h" 135#undef __fcfs__ 136