~ubuntu-branches/ubuntu/intrepid/fontconfig/intrepid

« back to all changes in this revision

Viewing changes to src/fcfs.c

  • Committer: Bazaar Package Importer
  • Author(s): Keith Packard
  • Date: 2008-05-31 20:01:57 UTC
  • mto: (0.1.4 lenny) (1.1.6 upstream)
  • mto: This revision was merged to the branch mainline in revision 28.
  • Revision ID: james.westby@ubuntu.com-20080531200157-7u3xgmgeh1594flx
Import upstream version 2.6.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 "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__