]> git.wh0rd.org Git - fontconfig.git/blob - src/fcfs.c
Remove special-casing of FC_FILE in FcPatternPrint()
[fontconfig.git] / src / fcfs.c
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  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18  * EVENT SHALL KEITH PACKARD 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
28 FcFontSet *
29 FcFontSetCreate (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
43 void
44 FcFontSetDestroy (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
59 FcBool
60 FcFontSetAdd (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
84 FcBool
85 FcFontSetSerializeAlloc (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
101 FcFontSet *
102 FcFontSetSerialize (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__