Add uuid in configure file
[platform/upstream/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 the author(s) not be used in
11  * advertising or publicity pertaining to distribution of the software without
12  * specific, written prior permission.  The authors make 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
28 FcFontSet *
29 FcFontSetCreate (void)
30 {
31     FcFontSet   *s;
32
33     s = (FcFontSet *) malloc (sizeof (FcFontSet));
34     if (!s)
35         return 0;
36     s->nfont = 0;
37     s->sfont = 0;
38     s->fonts = 0;
39     return s;
40 }
41
42 void
43 FcFontSetDestroy (FcFontSet *s)
44 {
45     if (s)
46     {
47         int         i;
48
49         for (i = 0; i < s->nfont; i++)
50             FcPatternDestroy (s->fonts[i]);
51         if (s->fonts)
52             free (s->fonts);
53         free (s);
54     }
55 }
56
57 FcBool
58 FcFontSetAdd (FcFontSet *s, FcPattern *font)
59 {
60     FcPattern   **f;
61     int         sfont;
62
63     if (s->nfont == s->sfont)
64     {
65         sfont = s->sfont + 32;
66         if (s->fonts)
67             f = (FcPattern **) realloc (s->fonts, sfont * sizeof (FcPattern *));
68         else
69             f = (FcPattern **) malloc (sfont * sizeof (FcPattern *));
70         if (!f)
71             return FcFalse;
72         s->sfont = sfont;
73         s->fonts = f;
74     }
75     s->fonts[s->nfont++] = font;
76     return FcTrue;
77 }
78
79 FcBool
80 FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s)
81 {
82     int i;
83
84     if (!FcSerializeAlloc (serialize, s, sizeof (FcFontSet)))
85         return FcFalse;
86     if (!FcSerializeAlloc (serialize, s->fonts, s->nfont * sizeof (FcPattern *)))
87         return FcFalse;
88     for (i = 0; i < s->nfont; i++)
89     {
90         if (!FcPatternSerializeAlloc (serialize, s->fonts[i]))
91             return FcFalse;
92     }
93     return FcTrue;
94 }
95
96 FcFontSet *
97 FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s)
98 {
99     int         i;
100     FcFontSet   *s_serialize;
101     FcPattern   **fonts_serialize;
102     FcPattern   *p_serialize;
103
104     s_serialize = FcSerializePtr (serialize, s);
105     if (!s_serialize)
106         return NULL;
107     *s_serialize = *s;
108     s_serialize->sfont = s_serialize->nfont;
109
110     fonts_serialize = FcSerializePtr (serialize, s->fonts);
111     if (!fonts_serialize)
112         return NULL;
113     s_serialize->fonts = FcPtrToEncodedOffset (s_serialize,
114                                                fonts_serialize, FcPattern *);
115
116     for (i = 0; i < s->nfont; i++)
117     {
118         p_serialize = FcPatternSerialize (serialize, s->fonts[i]);
119         if (!p_serialize)
120             return NULL;
121         fonts_serialize[i] = FcPtrToEncodedOffset (s_serialize,
122                                                    p_serialize,
123                                                    FcPattern);
124     }
125
126     return s_serialize;
127 }
128
129 FcFontSet *
130 FcFontSetDeserialize (const FcFontSet *set)
131 {
132     int i;
133     FcFontSet *new = FcFontSetCreate ();
134
135     if (!new)
136         return NULL;
137     for (i = 0; i < set->nfont; i++)
138     {
139         if (!FcFontSetAdd (new, FcPatternDuplicate (FcFontSetFont (set, i))))
140             goto bail;
141     }
142
143     return new;
144 bail:
145     FcFontSetDestroy (new);
146
147     return NULL;
148 }
149
150 #define __fcfs__
151 #include "fcaliastail.h"
152 #undef __fcfs__