]> git.wh0rd.org - fontconfig.git/commitdiff
Fix fc-lang to use new charset freezer API.
authorKeith Packard <keithp@neko.keithp.com>
Fri, 1 Sep 2006 08:49:47 +0000 (01:49 -0700)
committerKeith Packard <keithp@neko.keithp.com>
Fri, 1 Sep 2006 08:49:47 +0000 (01:49 -0700)
Charset freezer api now uses allocated object. Also required minor fixes to
charset freezer code to remove assumption that all input charsets are
persistant.

fc-lang/fc-lang.c
src/fccharset.c
src/fcint.h

index 324a0b2a85fe780c2e3e6b3b5b9dd7aa3e0ad70d..69dfac25a76582c82598640ac7fa526ec173bf3d 100644 (file)
@@ -48,6 +48,8 @@ FcMemFree (int kind, int size)
 {
 }
 
+int FcDebugVal;
+
 FcChar8 *
 FcConfigHome (void)
 {
@@ -114,14 +116,14 @@ scanopen (char *file)
  * Comments begin with '#'
  */
 
-static FcCharSet *
-scan (FILE *f, char *file)
+static const FcCharSet *
+scan (FILE *f, char *file, FcCharSetFreezer *freezer)
 {
-    FcCharSet  *c = 0;
-    FcCharSet  *n;
-    int                start, end, ucs4;
-    char       line[1024];
-    int                lineno = 0;
+    FcCharSet      *c = 0;
+    const FcCharSet *n;
+    int                    start, end, ucs4;
+    char           line[1024];
+    int                    lineno = 0;
 
     while (get_line (f, line, &lineno))
     {
@@ -136,9 +138,9 @@ scan (FILE *f, char *file)
            f = scanopen (file);
            if (!f)
                fatal (file, 0, "can't open");
-           c = scan (f, file);
+           n = scan (f, file, freezer);
            fclose (f);
-           return c;
+           return n;
        }
        if (strchr (line, '-'))
        {
@@ -159,7 +161,7 @@ scan (FILE *f, char *file)
                fatal (file, lineno, "out of memory");
        }
     }
-    n = FcCharSetFreeze (c);
+    n = FcCharSetFreeze (freezer, c);
     FcCharSetDestroy (c);
     return n;
 }
@@ -222,7 +224,7 @@ int
 main (int argc, char **argv)
 {
     static char                *files[MAX_LANG];
-    static FcCharSet   *sets[MAX_LANG];
+    static const FcCharSet     *sets[MAX_LANG];
     static int         duplicate[MAX_LANG];
     static int         country[MAX_LANG];
     static char                *names[MAX_LANG];
@@ -242,7 +244,11 @@ main (int argc, char **argv)
     int                setRangeStart[26];
     int                setRangeEnd[26];
     FcChar8    setRangeChar;
+    FcCharSetFreezer   *freezer;
     
+    freezer = FcCharSetFreezerCreate ();
+    if (!freezer)
+       fatal (argv[0], 0, "out of memory");
     argi = 1;
     while (argv[argi])
     {
@@ -264,7 +270,7 @@ main (int argc, char **argv)
        f = scanopen (files[i]);
        if (!f)
            fatal (files[i], 0, strerror (errno));
-       sets[i] = scan (f, files[i]);
+       sets[i] = scan (f, files[i], freezer);
        names[i] = get_name (files[i]);
        langs[i] = get_lang(names[i]);
        if (strchr (langs[i], '-'))
index 43aa22c46d873ccc55288047a222db1dba07bd3d..3dac4ce6a378d627187245e36959c209778e2283 100644 (file)
@@ -1169,7 +1169,7 @@ FcCharSetFindFrozen (FcCharSetFreezer *freezer, const FcCharSet *orig)
     return NULL;
 }
 
-static const FcCharSet *
+const FcCharSet *
 FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs)
 {
     FcCharSet      *b;
@@ -1177,10 +1177,6 @@ FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs)
     FcCharLeaf     *l;
     int                    i;
 
-    n = FcCharSetFindFrozen (freezer, fcs);
-    if (n)
-       return n;
-    
     b = FcCharSetCreate ();
     if (!b)
        goto bail0;
@@ -1217,7 +1213,7 @@ bail0:
     return n;
 }
 
-static FcCharSetFreezer *
+FcCharSetFreezer *
 FcCharSetFreezerCreate (void)
 {
     FcCharSetFreezer   *freezer;
@@ -1279,6 +1275,9 @@ FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs)
            if (!serialize->cs_freezer)
                return FcFalse;
        }
+       if (FcCharSetFindFrozen (serialize->cs_freezer, cs))
+           return FcTrue;
+    
         cs = FcCharSetFreeze (serialize->cs_freezer, cs);
     }
     
index ce0ac7c845b7b02a483c8a0d4e691e03ac5787af..42aa0eb20e6251bf01883de459978e12644359cb 100644 (file)
@@ -623,6 +623,12 @@ FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
 void
 FcLangCharSetPopulate (void);
 
+FcCharSetFreezer *
+FcCharSetFreezerCreate (void);
+
+const FcCharSet *
+FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
+
 void
 FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);