[Fontconfig] fontconfig: Branch 'fc-2_4-keithp'

Keith Packard keithp at kemper.freedesktop.org
Fri Sep 1 01:50:11 PDT 2006


 fc-lang/fc-lang.c |   30 ++++++++++++++++++------------
 src/fccharset.c   |   11 +++++------
 src/fcint.h       |    6 ++++++
 3 files changed, 29 insertions(+), 18 deletions(-)

New commits:
diff-tree 18b6857c6476517db7932025847ae952feba758d (from bc5e487f2a1ad9946aa5c6e19cd75794fc38d530)
Author: Keith Packard <keithp at neko.keithp.com>
Date:   Fri Sep 1 01:49:47 2006 -0700

    Fix fc-lang to use new charset freezer API.
    
    Charset freezer api now uses allocated object. Also required minor fixes to
    charset freezer code to remove assumption that all input charsets are
    persistant.

diff --git a/fc-lang/fc-lang.c b/fc-lang/fc-lang.c
index 324a0b2..69dfac2 100644
--- a/fc-lang/fc-lang.c
+++ b/fc-lang/fc-lang.c
@@ -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], '-'))
diff --git a/src/fccharset.c b/src/fccharset.c
index 43aa22c..3dac4ce 100644
--- a/src/fccharset.c
+++ b/src/fccharset.c
@@ -1169,7 +1169,7 @@ FcCharSetFindFrozen (FcCharSetFreezer *f
     return NULL;
 }
 
-static const FcCharSet *
+const FcCharSet *
 FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs)
 {
     FcCharSet	    *b;
@@ -1177,10 +1177,6 @@ FcCharSetFreeze (FcCharSetFreezer *freez
     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 *se
 	    if (!serialize->cs_freezer)
 		return FcFalse;
 	}
+	if (FcCharSetFindFrozen (serialize->cs_freezer, cs))
+	    return FcTrue;
+    
         cs = FcCharSetFreeze (serialize->cs_freezer, cs);
     }
     
diff --git a/src/fcint.h b/src/fcint.h
index ce0ac7c..42aa0eb 100644
--- a/src/fcint.h
+++ b/src/fcint.h
@@ -623,6 +623,12 @@ FcLangSetSerialize(FcSerialize *serializ
 void
 FcLangCharSetPopulate (void);
 
+FcCharSetFreezer *
+FcCharSetFreezerCreate (void);
+
+const FcCharSet *
+FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
+
 void
 FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
 


More information about the Fontconfig mailing list