SOURCES (DEVEL): fontconfig-bug2878.patch (NEW) - https://bugs.fre...

freetz freetz at pld-linux.org
Sun Nov 6 11:38:25 CET 2005


Author: freetz                       Date: Sun Nov  6 10:38:25 2005 GMT
Module: SOURCES                       Tag: DEVEL
---- Log message:
- https://bugs.freedesktop.org/show_bug.cgi?id=2878

---- Files affected:
SOURCES:
   fontconfig-bug2878.patch (NONE -> 1.1.2.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/fontconfig-bug2878.patch
diff -u /dev/null SOURCES/fontconfig-bug2878.patch:1.1.2.1
--- /dev/null	Sun Nov  6 11:38:25 2005
+++ SOURCES/fontconfig-bug2878.patch	Sun Nov  6 11:38:19 2005
@@ -0,0 +1,221 @@
+diff -aurN fontconfig-2.9.92.orig/fc-lang/fc-lang.c fontconfig-2.9.92/fc-lang/fc-lang.c
+--- fontconfig-2.9.92.orig/fc-lang/fc-lang.c	2005-09-23 03:48:33.000000000 +0200
++++ fontconfig-2.9.92/fc-lang/fc-lang.c	2005-11-04 20:31:26.000000000 +0100
+@@ -37,6 +37,10 @@
+  * functions are also needed in slightly modified form
+  */
+ 
++const FcChar16 *langBankNumbers = 0;
++const FcCharLeaf	*langBankLeaves = 0;
++const int *langBankLeafIdx = 0;
++
+ void
+ FcMemAlloc (int kind, int size)
+ {
+@@ -232,6 +236,7 @@
+     int		argi;
+     FcCharLeaf	**leaves;
+     int		total_leaves = 0;
++    int		leafidx_count = 0, numbers_count = 0, numbers_ptr = 0;
+     int		l, sl, tl;
+     int		c;
+     char	line[1024];
+@@ -306,7 +311,7 @@
+     /*
+      * Dump leaves
+      */
+-    printf ("static const FcCharLeaf	leaves[%d] = {\n", tl);
++    printf ("const FcCharLeaf	langBankLeaves[%d] = {\n", tl);
+     for (l = 0; l < tl; l++)
+     {
+ 	printf ("    { { /* %d */", l);
+@@ -319,7 +324,6 @@
+ 	printf ("\n    } },\n");
+     }
+     printf ("};\n\n");
+-    printf ("#define L(n) ((FcCharLeaf *) &leaves[n])\n\n");
+ 
+     /*
+      * Find duplicate charsets
+@@ -362,8 +366,27 @@
+ 	
+ 	if (duplicate[i] >= 0)
+ 	    continue;
+-	printf ("static const FcCharLeaf *leaves_%s[%d] = {\n",
+-		names[i], sets[i]->num);
++
++	for (n = 0; n < sets[i]->num; n++)
++	{
++	    for (l = 0; l < tl; l++)
++		if (leaves[l] == FcCharSetGetLeaf(sets[i], n))
++		    break;
++	    if (l == tl)
++		fatal (names[i], 0, "can't find leaf");
++            leafidx_count++;
++            numbers_count += sets[i]->num;
++	}
++    }
++
++    printf ("const int langBankLeafIdx[%d] = {\n",
++	    leafidx_count);
++    for (i = 0; sets[i]; i++)
++    {
++	int n;
++	
++	if (duplicate[i] >= 0)
++	    continue;
+ 	for (n = 0; n < sets[i]->num; n++)
+ 	{
+ 	    if (n % 8 == 0)
+@@ -373,17 +396,21 @@
+ 		    break;
+ 	    if (l == tl)
+ 		fatal (names[i], 0, "can't find leaf");
+-	    printf (" L(%3d),", l);
++	    printf (" %3d,", l);
+ 	    if (n % 8 == 7)
+ 		printf ("\n");
+ 	}
+ 	if (n % 8 != 0)
+ 	    printf ("\n");
+-	printf ("};\n\n");
+-	
++    }
++    printf ("};\n\n");
+ 
+-	printf ("static const FcChar16 numbers_%s[%d] = {\n",
+-		names[i], sets[i]->num);
++    printf ("const FcChar16 langBankNumbers[%d] = {\n",
++	    numbers_count);
++
++    for (i = 0; sets[i]; i++)
++    {
++	int n;
+ 	for (n = 0; n < sets[i]->num; n++)
+ 	{
+ 	    if (n % 8 == 0)
+@@ -394,27 +421,27 @@
+ 	}
+ 	if (n % 8 != 0)
+ 	    printf ("\n");
+-	printf ("};\n\n");
+     }
+-    printf ("#undef L\n\n");
++    printf ("};\n\n");
+     
+     /*
+      * Dump sets
+      */
+ 
+-    printf ("static const FcLangCharSet  fcLangCharSets[] = {\n");
++    printf ("const FcLangCharSet  fcLangCharSets[] = {\n");
+     for (i = 0; sets[i]; i++)
+     {
+ 	int	j = duplicate[i];
+ 
+ 	if (j < 0)
+ 	    j = i;
++
+ 	printf ("    { (FcChar8 *) \"%s\",\n"
+-		"      { FC_REF_CONSTANT, %d, FC_BANK_DYNAMIC, "
+-		"{ { (FcCharLeaf **) leaves_%s, "
+-		"(FcChar16 *) numbers_%s } } } },\n",
++		"      { FC_REF_CONSTANT, %d, FC_BANK_LANGS, "
++		"{ .stat = { %d, %d } } } },\n",
+ 		langs[i],
+-		sets[j]->num, names[j], names[j]);
++		sets[j]->num, j, numbers_ptr);
++        numbers_ptr += sets[i]->num;
+     }
+     printf ("};\n\n");
+     printf ("#define NUM_LANG_CHAR_SET	%d\n", i);
+diff -aurN fontconfig-2.9.92.orig/src/fccharset.c fontconfig-2.9.92/src/fccharset.c
+--- fontconfig-2.9.92.orig/src/fccharset.c	2005-09-23 01:45:53.000000000 +0200
++++ fontconfig-2.9.92/src/fccharset.c	2005-11-04 20:31:26.000000000 +0100
+@@ -38,6 +38,24 @@
+ static int ** leaf_idx = 0;
+ static int charset_leaf_idx_ptr, charset_leaf_idx_count;
+ 
++extern const FcChar16 *langBankNumbers;
++extern const FcCharLeaf	*langBankLeaves;
++extern const int *langBankLeafIdx;
++
++static FcBool
++FcCharSetEnsureBank (int bi);
++
++void
++FcLangCharSetPopulate (void)
++{
++    int bi = FcCacheBankToIndex (FC_BANK_LANGS);
++    FcCharSetEnsureBank (bi);
++    charsets[bi] = 0;
++    numbers[bi] = (FcChar16 *)&langBankNumbers;
++    leaves[bi] = (FcCharLeaf *)&langBankLeaves;
++    leaf_idx[bi] = (int *)&langBankLeafIdx;
++}
++
+ FcCharSet *
+ FcCharSetCreate (void)
+ {
+diff -aurN fontconfig-2.9.92.orig/src/fcint.h fontconfig-2.9.92/src/fcint.h
+--- fontconfig-2.9.92.orig/src/fcint.h	2005-11-02 07:29:14.000000000 +0100
++++ fontconfig-2.9.92/src/fcint.h	2005-11-04 20:31:26.000000000 +0100
+@@ -99,6 +99,8 @@
+ 
+ #define FC_MEM_NUM	    30
+ 
++#define FC_BANK_LANGS	    0xfcfcfcfc
++
+ typedef enum _FcValueBinding {
+     FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
+ } FcValueBinding;
+@@ -524,6 +526,9 @@
+ FcConfigModifiedTime (FcConfig *config);
+ 
+ /* fccharset.c */
++void
++FcLangCharSetPopulate (void);
++
+ FcCharSet *
+ FcCharSetFreeze (FcCharSet *cs);
+ 
+diff -aurN fontconfig-2.9.92.orig/src/fclang.c fontconfig-2.9.92/src/fclang.c
+--- fontconfig-2.9.92.orig/src/fclang.c	2005-10-14 23:02:31.000000000 +0200
++++ fontconfig-2.9.92/src/fclang.c	2005-11-04 20:31:26.000000000 +0100
+@@ -44,6 +44,8 @@
+ #define FcLangSetBitSet(ls, id)	((ls)->map[(id)>>5] |= ((FcChar32) 1 << ((id) & 0x1f)))
+ #define FcLangSetBitGet(ls, id) (((ls)->map[(id)>>5] >> ((id) & 0x1f)) & 1)
+ 
++static FcBool langsets_populated = FcFalse;
++
+ FcLangSet *
+ FcFreeTypeLangSet (const FcCharSet  *charset, 
+ 		   const FcChar8    *exclusiveLang)
+@@ -52,7 +54,12 @@
+     FcChar32	    missing;
+     const FcCharSet *exclusiveCharset = 0;
+     FcLangSet	    *ls;
+-    
++
++    if (!langsets_populated)
++    {
++        FcLangCharSetPopulate ();
++        langsets_populated = FcTrue;
++    }
+ 
+     if (exclusiveLang)
+ 	exclusiveCharset = FcCharSetForLang (exclusiveLang);
+@@ -188,6 +195,13 @@
+ {
+     int		i;
+     int		country = -1;
++
++    if (!langsets_populated)
++    {
++        FcLangCharSetPopulate ();
++        langsets_populated = FcTrue;
++    }
++
+     for (i = 0; i < NUM_LANG_CHAR_SET; i++)
+     {
+ 	switch (FcLangCompare (lang, fcLangCharSets[i].lang)) {
================================================================



More information about the pld-cvs-commit mailing list