Rename FcPatternThawAll to FcPatternFini.

Pull the FcObjectStateName hash table out to file scope, and add
    FcObjectStaticNameFini so that FcFini will cleanup this hash table as
    well.
Clear FILE* to NULL after fclose.
This commit is contained in:
Carl Worth 2005-07-15 17:43:44 +00:00
parent f1a42f6b5f
commit 7850458d28
5 changed files with 54 additions and 15 deletions

View File

@ -1,3 +1,18 @@
2005-07-15 Carl Worth <cworth@cworth.org>
* src/fcint.h:
* src/fcinit.c: (FcFini):
* src/fcpat.c: (FcPatternFini): Rename FcPatternThawAll to
FcPatternFini.
* src/fcpat.c: (FcObjectStaticName), (FcObjectStaticNameFini):
Pull the FcObjectStateName hash table out to file scope, and add
FcObjectStaticNameFini so that FcFini will cleanup this hash table
as well.
* src/fcxml.c: (FcConfigParseAndLoad): Clear FILE* to NULL after
fclose.
2005-06-16 Patrick Lam <plam@MIT.EDU> 2005-06-16 Patrick Lam <plam@MIT.EDU>
reviewed by: keithp reviewed by: keithp

View File

@ -116,7 +116,7 @@ FcFini (void)
if (_fcConfig) if (_fcConfig)
FcConfigDestroy (_fcConfig); FcConfigDestroy (_fcConfig);
FcPatternThawAll (); FcPatternFini ();
FcCharSetThawAll (); FcCharSetThawAll ();
} }

View File

@ -710,7 +710,7 @@ FcPattern *
FcPatternFreeze (FcPattern *p); FcPatternFreeze (FcPattern *p);
void void
FcPatternThawAll (void); FcPatternFini (void);
FcBool FcBool
FcPatternAppend (FcPattern *p, FcPattern *s); FcPatternAppend (FcPattern *p, FcPattern *s);

View File

@ -579,13 +579,6 @@ bail:
return n; return n;
} }
void
FcPatternThawAll (void)
{
FcPatternBaseThawAll ();
FcValueListThawAll ();
}
static int static int
FcPatternPosition (const FcPattern *p, const char *object) FcPatternPosition (const FcPattern *p, const char *object)
{ {
@ -1173,20 +1166,21 @@ FcPatternAppend (FcPattern *p, FcPattern *s)
return FcTrue; return FcTrue;
} }
const char *
FcObjectStaticName (const char *name)
{
#define OBJECT_HASH_SIZE 31 #define OBJECT_HASH_SIZE 31
static struct objectBucket { static struct objectBucket {
struct objectBucket *next; struct objectBucket *next;
FcChar32 hash; FcChar32 hash;
} *buckets[OBJECT_HASH_SIZE]; } *FcObjectBuckets[OBJECT_HASH_SIZE];
const char *
FcObjectStaticName (const char *name)
{
FcChar32 hash = FcStringHash ((const FcChar8 *) name); FcChar32 hash = FcStringHash ((const FcChar8 *) name);
struct objectBucket **p; struct objectBucket **p;
struct objectBucket *b; struct objectBucket *b;
int size; int size;
for (p = &buckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
if (b->hash == hash && !strcmp (name, (char *) (b + 1))) if (b->hash == hash && !strcmp (name, (char *) (b + 1)))
return (char *) (b + 1); return (char *) (b + 1);
size = sizeof (struct objectBucket) + strlen (name) + 1; size = sizeof (struct objectBucket) + strlen (name) + 1;
@ -1200,3 +1194,32 @@ FcObjectStaticName (const char *name)
*p = b; *p = b;
return (char *) (b + 1); return (char *) (b + 1);
} }
static void
FcObjectStaticNameFini (void)
{
int i, size;
struct objectBucket *b, *next;
char *name;
for (i = 0; i < OBJECT_HASH_SIZE; i++)
{
for (b = FcObjectBuckets[i]; b; b = next)
{
next = b->next;
name = (char *) (b + 1);
size = sizeof (struct objectBucket) + strlen (name) + 1;
FcMemFree (FC_MEM_STATICSTR, size);
free (b);
}
FcObjectBuckets[i] = 0;
}
}
void
FcPatternFini (void)
{
FcPatternBaseThawAll ();
FcValueListThawAll ();
FcObjectStaticNameFini ();
}

View File

@ -2375,6 +2375,7 @@ bail2:
XML_ParserFree (p); XML_ParserFree (p);
bail1: bail1:
fclose (f); fclose (f);
f = NULL;
bail0: bail0:
if (error && complain) if (error && complain)
{ {