Change RCS tag
[platform/upstream/fontconfig.git] / src / fcfs.c
1 /*
2  * $RCSId: $
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 <stdlib.h>
26 #include "fcint.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 }