/* * $RCSId:$ * * Copyright © 2002 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Keith Packard not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Keith Packard makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" FcBlanks * FcBlanksCreate (void) { FcBlanks *b; b = malloc (sizeof (FcBlanks)); if (!b) return 0; FcMemAlloc (FC_MEM_BLANKS, sizeof (FcBlanks)); b->nblank = 0; b->sblank = 0; b->blanks = 0; return b; } void FcBlanksDestroy (FcBlanks *b) { if (b->blanks) { FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32)); free (b->blanks); } FcMemFree (FC_MEM_BLANKS, sizeof (FcBlanks)); free (b); } FcBool FcBlanksAdd (FcBlanks *b, FcChar32 ucs4) { FcChar32 *c; int sblank; for (sblank = 0; sblank < b->nblank; sblank++) if (b->blanks[sblank] == ucs4) return FcTrue; if (b->nblank == b->sblank) { sblank = b->sblank + 32; if (b->blanks) c = (FcChar32 *) realloc (b->blanks, sblank * sizeof (FcChar32)); else c = (FcChar32 *) malloc (sblank * sizeof (FcChar32)); if (!c) return FcFalse; if (b->sblank) FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32)); FcMemAlloc (FC_MEM_BLANKS, sblank * sizeof (FcChar32)); b->sblank = sblank; b->blanks = c; } b->blanks[b->nblank++] = ucs4; return FcTrue; } FcBool FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4) { int i; for (i = 0; i < b->nblank; i++) if (b->blanks[i] == ucs4) return FcTrue; return FcFalse; }