Put all FcPattern objects though FcObjectStaticName and do pointer trather
authorRoss Burton <ross@burtonini.com>
Thu, 31 Mar 2005 19:16:49 +0000 (19:16 +0000)
committerRoss Burton <ross@burtonini.com>
Thu, 31 Mar 2005 19:16:49 +0000 (19:16 +0000)
    than string compares

ChangeLog
src/fclist.c
src/fcmatch.c
src/fcpat.c

index c18acbc..63c44cd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-03-31  Ross Burton  <ross@burtonini.com>
+
+       * src/fclist.c:
+       * src/fcmatch.c:
+       * src/fcpat.c:
+       Run all FcPattern objects through FcObjectStaticName, so that
+       compares can be done on pointers instead of strings (#2659)
+
 2005-03-17  Tor Lillqvist  <tml@novell.com>
 
        * src/fontconfig.def.in: Add the .dll to the dll name.
index aaa9061..ec47ddc 100644 (file)
@@ -67,10 +67,11 @@ FcObjectSetAdd (FcObjectSet *os, const char *object)
     low = 0;
     mid = 0;
     c = 1;
+    object = FcObjectStaticName (object);
     while (low <= high)
     {
        mid = (low + high) >> 1;
-       c = strcmp (os->objects[mid], object);
+       c = os->objects[mid] - object;
        if (c == 0)
            return FcTrue;
        if (c < 0)
@@ -82,7 +83,7 @@ FcObjectSetAdd (FcObjectSet *os, const char *object)
        mid++;
     memmove (os->objects + mid + 1, os->objects + mid, 
             (os->nobject - mid) * sizeof (const char *));
-    os->objects[mid] = FcObjectStaticName (object);
+    os->objects[mid] = object;
     os->nobject++;
     return FcTrue;
 }
index 9afe495..9a6b35f 100644 (file)
@@ -406,7 +406,7 @@ FcCompare (FcPattern        *pat,
     i2 = 0;
     while (i1 < pat->num && i2 < fnt->num)
     {
-       i = strcmp (pat->elts[i1].object, fnt->elts[i2].object);
+       i = pat->elts[i1].object - fnt->elts[i2].object;
        if (i > 0)
            i2++;
        else if (i < 0)
index 2fea173..32054e1 100644 (file)
@@ -588,6 +588,7 @@ FcPatternPosition (const FcPattern *p, const char *object)
 {
     int            low, high, mid, c;
 
+    object = FcObjectStaticName(object);
     low = 0;
     high = p->num - 1;
     c = 1;
@@ -595,7 +596,7 @@ FcPatternPosition (const FcPattern *p, const char *object)
     while (low <= high)
     {
        mid = (low + high) >> 1;
-       c = strcmp (p->elts[mid].object, object);
+       c = p->elts[mid].object - object;
        if (c == 0)
            return mid;
        if (c < 0)