summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2005-07-15 17:43:44 +0000
committerCarl Worth <cworth@cworth.org>2005-07-15 17:43:44 +0000
commit7850458d28ae2cb3b1d7fa9dd9fecd125cef5369 (patch)
tree34ee9f04c0dcf344b1a563003bce74c941f5179d
parentf1a42f6b5f9bcd774d09002509b2872c04025c1b (diff)
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.
-rw-r--r--ChangeLog15
-rw-r--r--src/fcinit.c2
-rw-r--r--src/fcint.h2
-rw-r--r--src/fcpat.c49
-rw-r--r--src/fcxml.c1
5 files changed, 54 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 2984b0f..d3d9a81 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
reviewed by: keithp
diff --git a/src/fcinit.c b/src/fcinit.c
index c3f497b..8a9bdbd 100644
--- a/src/fcinit.c
+++ b/src/fcinit.c
@@ -116,7 +116,7 @@ FcFini (void)
if (_fcConfig)
FcConfigDestroy (_fcConfig);
- FcPatternThawAll ();
+ FcPatternFini ();
FcCharSetThawAll ();
}
diff --git a/src/fcint.h b/src/fcint.h
index 24bf246..3611df9 100644
--- a/src/fcint.h
+++ b/src/fcint.h
@@ -710,7 +710,7 @@ FcPattern *
FcPatternFreeze (FcPattern *p);
void
-FcPatternThawAll (void);
+FcPatternFini (void);
FcBool
FcPatternAppend (FcPattern *p, FcPattern *s);
diff --git a/src/fcpat.c b/src/fcpat.c
index c886c92..254faae 100644
--- a/src/fcpat.c
+++ b/src/fcpat.c
@@ -579,13 +579,6 @@ bail:
return n;
}
-void
-FcPatternThawAll (void)
-{
- FcPatternBaseThawAll ();
- FcValueListThawAll ();
-}
-
static int
FcPatternPosition (const FcPattern *p, const char *object)
{
@@ -1173,20 +1166,21 @@ FcPatternAppend (FcPattern *p, FcPattern *s)
return FcTrue;
}
+#define OBJECT_HASH_SIZE 31
+static struct objectBucket {
+ struct objectBucket *next;
+ FcChar32 hash;
+} *FcObjectBuckets[OBJECT_HASH_SIZE];
+
const char *
FcObjectStaticName (const char *name)
{
-#define OBJECT_HASH_SIZE 31
- static struct objectBucket {
- struct objectBucket *next;
- FcChar32 hash;
- } *buckets[OBJECT_HASH_SIZE];
FcChar32 hash = FcStringHash ((const FcChar8 *) name);
struct objectBucket **p;
struct objectBucket *b;
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)))
return (char *) (b + 1);
size = sizeof (struct objectBucket) + strlen (name) + 1;
@@ -1200,3 +1194,32 @@ FcObjectStaticName (const char *name)
*p = b;
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 ();
+}
diff --git a/src/fcxml.c b/src/fcxml.c
index 539e57f..4176c73 100644
--- a/src/fcxml.c
+++ b/src/fcxml.c
@@ -2375,6 +2375,7 @@ bail2:
XML_ParserFree (p);
bail1:
fclose (f);
+ f = NULL;
bail0:
if (error && complain)
{