summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@neko.keithp.com>2006-09-01 01:49:47 -0700
committerKeith Packard <keithp@neko.keithp.com>2006-09-01 01:49:47 -0700
commit18b6857c6476517db7932025847ae952feba758d (patch)
tree8df0411a3683e1520d8a504d55d397c56c8f6aa7
parentbc5e487f2a1ad9946aa5c6e19cd75794fc38d530 (diff)
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.
-rw-r--r--fc-lang/fc-lang.c30
-rw-r--r--src/fccharset.c11
-rw-r--r--src/fcint.h6
3 files changed, 29 insertions, 18 deletions
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 *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);
}
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 *serialize, const FcLangSet *l);
void
FcLangCharSetPopulate (void);
+FcCharSetFreezer *
+FcCharSetFreezerCreate (void);
+
+const FcCharSet *
+FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
+
void
FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);