From acb5ee2e561276d64c6e26ef4b82f59a4db5ae90 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 24 May 2000 20:22:51 +0000 Subject: [PATCH] Update. 2000-05-24 Ulrich Drepper * locale/programs/ld-collate.c (struct element_t): Add mbseqorder and wcseqorder members. (struct locale_collate_t): Likewise. (collate_finish): Assign collation sequence value to each character. Create tables for output. (collate_output): Write out tables with collation sequence information. * locale/C-collate.c: Provide C locale data for collation sequence table. * locale/langinfo.h: Add _NL_COLLATE_COLLSEQMB and _NL_COLLATE_COLLSEQWC. * locale/categories.def: Add entries for _NL_COLLATE_COLLSEQMB and _NL_COLLATE_COLLSEQWC. * posix/fnmatch.c: Define SUFFIX and WIDE_CHAR_VERSION before include fnmatch_loop.c. * posix/fnmatch_loop.c: Don't use strcoll while determining whether character is matched by range expression. Use collation sequence table. Outside glibc fall back on simple character value comparison. --- ChangeLog | 20 + locale/C-collate.c | 82 +- locale/categories.def | 2 + locale/langinfo.h | 2 + localedata/ChangeLog | 4 + localedata/locales/iso14651_t1 | 1406 ++++++++++++++++++++++++++++++++ posix/fnmatch.c | 15 +- posix/fnmatch_loop.c | 135 ++- 8 files changed, 1644 insertions(+), 22 deletions(-) create mode 100644 localedata/locales/iso14651_t1 diff --git a/ChangeLog b/ChangeLog index 9440cba153..5ce40be794 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2000-05-24 Ulrich Drepper + + * locale/programs/ld-collate.c (struct element_t): Add mbseqorder + and wcseqorder members. + (struct locale_collate_t): Likewise. + (collate_finish): Assign collation sequence value to each character. + Create tables for output. + (collate_output): Write out tables with collation sequence information. + * locale/C-collate.c: Provide C locale data for collation sequence + table. + * locale/langinfo.h: Add _NL_COLLATE_COLLSEQMB and + _NL_COLLATE_COLLSEQWC. + * locale/categories.def: Add entries for _NL_COLLATE_COLLSEQMB and + _NL_COLLATE_COLLSEQWC. + * posix/fnmatch.c: Define SUFFIX and WIDE_CHAR_VERSION before + include fnmatch_loop.c. + * posix/fnmatch_loop.c: Don't use strcoll while determining whether + character is matched by range expression. Use collation sequence + table. Outside glibc fall back on simple character value comparison. + 2000-05-24 Andreas Jaeger * sysdeps/mips/elf/start.S (ENTRY_POINT): Align stack for double diff --git a/locale/C-collate.c b/locale/C-collate.c index 679ed30871..0ad0efe271 100644 --- a/locale/C-collate.c +++ b/locale/C-collate.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -20,12 +20,84 @@ #include #include "localeinfo.h" +static const char collseqmb[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', + '\x08', '\x09', '\x0a', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', + '\x18', '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x25', '\x26', '\x27', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x2d', '\x2e', '\x2f', + '\x30', '\x31', '\x32', '\x33', '\x34', '\x35', '\x36', '\x37', + '\x38', '\x39', '\x3a', '\x3b', '\x3c', '\x3d', '\x3e', '\x3f', + '\x40', '\x41', '\x42', '\x43', '\x44', '\x45', '\x46', '\x47', + '\x48', '\x49', '\x4a', '\x4b', '\x4c', '\x4d', '\x4e', '\x4f', + '\x50', '\x51', '\x52', '\x53', '\x54', '\x55', '\x56', '\x57', + '\x58', '\x59', '\x5a', '\x5b', '\x5c', '\x5d', '\x5e', '\x5f', + '\x60', '\x61', '\x62', '\x63', '\x64', '\x65', '\x66', '\x67', + '\x68', '\x69', '\x6a', '\x6b', '\x6c', '\x6d', '\x6e', '\x6f', + '\x70', '\x71', '\x72', '\x73', '\x74', '\x75', '\x76', '\x77', + '\x78', '\x79', '\x7a', '\x7b', '\x7c', '\x7d', '\x7e', '\x7f', + '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x8a', '\x8b', '\x8c', '\x8d', '\x8e', '\x8f', + '\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97', + '\x98', '\x99', '\x9a', '\x9b', '\x9c', '\x9d', '\x9e', '\x9f', + '\xa0', '\xa1', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', '\xa7', + '\xa8', '\xa9', '\xaa', '\xab', '\xac', '\xad', '\xae', '\xaf', + '\xb0', '\xb1', '\xb2', '\xb3', '\xb4', '\xb5', '\xb6', '\xb7', + '\xb8', '\xb9', '\xba', '\xbb', '\xbc', '\xbd', '\xbe', '\xbf', + '\xc0', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xca', '\xcb', '\xcc', '\xcd', '\xce', '\xcf', + '\xd0', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', '\xd7', + '\xd8', '\xd9', '\xda', '\xdb', '\xdc', '\xdd', '\xde', '\xdf', + '\xe0', '\xe1', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', '\xe7', + '\xe8', '\xe9', '\xea', '\xeb', '\xec', '\xed', '\xee', '\xef', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\xfa', '\xfb', '\xfc', '\xfd', '\xfe', '\xff' +}; + +static const uint32_t collseqwc[] = +{ + L'\x00', L'\x01', L'\x02', L'\x03', L'\x04', L'\x05', L'\x06', L'\x07', + L'\x08', L'\x09', L'\x0a', L'\x0b', L'\x0c', L'\x0d', L'\x0e', L'\x0f', + L'\x10', L'\x11', L'\x12', L'\x13', L'\x14', L'\x15', L'\x16', L'\x17', + L'\x18', L'\x19', L'\x1a', L'\x1b', L'\x1c', L'\x1d', L'\x1e', L'\x1f', + L'\x20', L'\x21', L'\x22', L'\x23', L'\x24', L'\x25', L'\x26', L'\x27', + L'\x28', L'\x29', L'\x2a', L'\x2b', L'\x2c', L'\x2d', L'\x2e', L'\x2f', + L'\x30', L'\x31', L'\x32', L'\x33', L'\x34', L'\x35', L'\x36', L'\x37', + L'\x38', L'\x39', L'\x3a', L'\x3b', L'\x3c', L'\x3d', L'\x3e', L'\x3f', + L'\x40', L'\x41', L'\x42', L'\x43', L'\x44', L'\x45', L'\x46', L'\x47', + L'\x48', L'\x49', L'\x4a', L'\x4b', L'\x4c', L'\x4d', L'\x4e', L'\x4f', + L'\x50', L'\x51', L'\x52', L'\x53', L'\x54', L'\x55', L'\x56', L'\x57', + L'\x58', L'\x59', L'\x5a', L'\x5b', L'\x5c', L'\x5d', L'\x5e', L'\x5f', + L'\x60', L'\x61', L'\x62', L'\x63', L'\x64', L'\x65', L'\x66', L'\x67', + L'\x68', L'\x69', L'\x6a', L'\x6b', L'\x6c', L'\x6d', L'\x6e', L'\x6f', + L'\x70', L'\x71', L'\x72', L'\x73', L'\x74', L'\x75', L'\x76', L'\x77', + L'\x78', L'\x79', L'\x7a', L'\x7b', L'\x7c', L'\x7d', L'\x7e', L'\x7f', + L'\x80', L'\x81', L'\x82', L'\x83', L'\x84', L'\x85', L'\x86', L'\x87', + L'\x88', L'\x89', L'\x8a', L'\x8b', L'\x8c', L'\x8d', L'\x8e', L'\x8f', + L'\x90', L'\x91', L'\x92', L'\x93', L'\x94', L'\x95', L'\x96', L'\x97', + L'\x98', L'\x99', L'\x9a', L'\x9b', L'\x9c', L'\x9d', L'\x9e', L'\x9f', + L'\xa0', L'\xa1', L'\xa2', L'\xa3', L'\xa4', L'\xa5', L'\xa6', L'\xa7', + L'\xa8', L'\xa9', L'\xaa', L'\xab', L'\xac', L'\xad', L'\xae', L'\xaf', + L'\xb0', L'\xb1', L'\xb2', L'\xb3', L'\xb4', L'\xb5', L'\xb6', L'\xb7', + L'\xb8', L'\xb9', L'\xba', L'\xbb', L'\xbc', L'\xbd', L'\xbe', L'\xbf', + L'\xc0', L'\xc1', L'\xc2', L'\xc3', L'\xc4', L'\xc5', L'\xc6', L'\xc7', + L'\xc8', L'\xc9', L'\xca', L'\xcb', L'\xcc', L'\xcd', L'\xce', L'\xcf', + L'\xd0', L'\xd1', L'\xd2', L'\xd3', L'\xd4', L'\xd5', L'\xd6', L'\xd7', + L'\xd8', L'\xd9', L'\xda', L'\xdb', L'\xdc', L'\xdd', L'\xde', L'\xdf', + L'\xe0', L'\xe1', L'\xe2', L'\xe3', L'\xe4', L'\xe5', L'\xe6', L'\xe7', + L'\xe8', L'\xe9', L'\xea', L'\xeb', L'\xec', L'\xed', L'\xee', L'\xef', + L'\xf0', L'\xf1', L'\xf2', L'\xf3', L'\xf4', L'\xf5', L'\xf6', L'\xf7', + L'\xf8', L'\xf9', L'\xfa', L'\xfb', L'\xfc', L'\xfd', L'\xfe', L'\xff' +}; + const struct locale_data _nl_C_LC_COLLATE = { _nl_C_name, NULL, 0, 0, /* no file mapped */ UNDELETABLE, - 16, + 18, { { word: 0 }, { string: NULL }, @@ -40,8 +112,10 @@ const struct locale_data _nl_C_LC_COLLATE = { string: NULL }, { string: NULL }, { string: NULL }, - { word: 0 }, { string: NULL }, - { string: NULL } + { string: NULL }, + { string: NULL }, + { string: collseqmb }, + { wstr: collseqwc } } }; diff --git a/locale/categories.def b/locale/categories.def index b02c1cac58..19e06879fd 100644 --- a/locale/categories.def +++ b/locale/categories.def @@ -58,6 +58,8 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_COLLATE_SYMB_HASH_SIZEMB, "collate-symb-hash-sizemb", std, word) DEFINE_ELEMENT (_NL_COLLATE_SYMB_TABLEMB, "collate-symb-tablemb", std, string) DEFINE_ELEMENT (_NL_COLLATE_SYMB_EXTRAMB, "collate-symb-extramb", std, string) + DEFINE_ELEMENT (_NL_COLLATE_COLLSEQMB, "collate-collseqmb", std, string) + DEFINE_ELEMENT (_NL_COLLATE_COLLSEQWC, "collate-collseqwc", std, string) ), NO_POSTLOAD) diff --git a/locale/langinfo.h b/locale/langinfo.h index 7d1183434a..b5ccac6b88 100644 --- a/locale/langinfo.h +++ b/locale/langinfo.h @@ -248,6 +248,8 @@ enum _NL_COLLATE_SYMB_HASH_SIZEMB, _NL_COLLATE_SYMB_TABLEMB, _NL_COLLATE_SYMB_EXTRAMB, + _NL_COLLATE_COLLSEQMB, + _NL_COLLATE_COLLSEQWC, _NL_NUM_LC_COLLATE, /* LC_CTYPE category: character classification. diff --git a/localedata/ChangeLog b/localedata/ChangeLog index e59ba8317a..3f40616dd3 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,3 +1,7 @@ +2000-05-24 Ulrich Drepper + + * locales/iso14651_t1: New file. + 2000-05-15 Andreas Jaeger * tst-fmon.data: Change testcase following fixes for diff --git a/localedata/locales/iso14651_t1 b/localedata/locales/iso14651_t1 new file mode 100644 index 0000000000..0402a1f510 --- /dev/null +++ b/localedata/locales/iso14651_t1 @@ -0,0 +1,1406 @@ +LC_COLLATE + +COLL_WEIGHT_MAX=4 + +# Déclaration des systèmes d'écriture / Declaration of scripts +script +script +script +script +script +script +script +script + +# Déclaration des symboles internes / Declaration of internal symbols +# +# SYMB N° Expl. +# +collating-symbol +# +# / +# +# +collating-symbol # 2 normal --> voir/see +collating-symbol # 3 isol. +collating-symbol # 4 final +collating-symbol # 5 initial +collating-symbol # 6 medial/mdian +# +collating-symbol # 7 minuscule/minuscule (bas de casse/lower case) +collating-symbol # 8 inférieur min./subscript min. (indice/index) +collating-symbol # 9 supér. min./superscript min. (exposant/exponent) +collating-symbol # 10 capitale/capital (haut de casse/upper case) +collating-symbol # 8 minuscule grecque/Greek lower case +collating-symbol # 11 inférieur en capitale/subscript capital +collating-symbol # 12 supérieur en capitale/superscript capital +# +# / +# +collating-symbol # 13 accent madda +collating-symbol # 14 accent hamza +collating-symbol # 14-1 accent hamza/waw +collating-symbol # 14-2 accent hamza under / hamza souscrit +collating-symbol # 14-3 accent under yeh / accent souscrit du ya' +collating-symbol # 14-4 accent hamza/yeh barree +# +collating-symbol # 15 de base/basic (non accentué/non-accented) +# +collating-symbol # 16 particulier/peculiar +collating-symbol # 17 ligature/ligature +collating-symbol # 18 accent aigu/acute accent +collating-symbol # 20 accent grave/grave accent +collating-symbol # 21 brève/breve +collating-symbol # 22 accent circonflexe/circumflex accent +collating-symbol # 23 caron/caron +collating-symbol # 24 rond supérieur/ring above +collating-symbol # 25 tréma/diaeresis (ou/or umlaut) +collating-symbol # 26 double ac. aigu/double acute ac. +collating-symbol # 27 tilde/tilde +collating-symbol # 28 point/dot +collating-symbol # 29 barre oblique/oblique +collating-symbol # 30 cédille/cedilla +collating-symbol # 31 ogonek/ogonek +collating-symbol # 32 macron/macron +# +# GREC +# +collating-symbol # accent aigu/tonos/acute accent +collating-symbol # trma/dialytica/diaeresis +collating-symbol # dialytika tonos +# +collating-symbol <0> +collating-symbol <1> +collating-symbol <2> +collating-symbol <3> +collating-symbol <4> +collating-symbol <5> +collating-symbol <6> +collating-symbol <7> +collating-symbol <8> +collating-symbol <9> +# +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol

# 112 + # 113 + # 114 + # 115 + # 116 + # 117 + # 118 + # 119 + # 120 + # 121 + # 122 +# 122b +# +# / +# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# +# +# + + + + + + + + + + + + + + + + + + + + + + + + + + + +# +#GREC +# + + + + + + + + + + + + + + + + + + + + + + + + +# +#CYRIL +# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +order_start ;forward;backward;forward;forward,position +# +# Tout caractère non précisément défini sera considéré comme caractère spécial +# et considéré uniquement au dernier niveau. +# +# Any character not precisely specified will be considered as a special +# character and considered only at the last level. +# ...... IGNORE;IGNORE;IGNORE;...... +# +# SYMB. N° GLY +# + IGNORE;IGNORE;IGNORE; # 32 + IGNORE;IGNORE;IGNORE; # 33 _ + IGNORE;IGNORE;IGNORE; # 34 <"_> + IGNORE;IGNORE;IGNORE; # 35 - (MACRON) + IGNORE;IGNORE;IGNORE; # 36 + IGNORE;IGNORE;IGNORE; # 37 - + IGNORE;IGNORE;IGNORE; # 38 , + IGNORE;IGNORE;IGNORE; # 39 ; + IGNORE;IGNORE;IGNORE; # 40 : + IGNORE;IGNORE;IGNORE; # 41 ! + IGNORE;IGNORE;IGNORE; # 42 ¡ + IGNORE;IGNORE;IGNORE; # 43 ? + IGNORE;IGNORE;IGNORE; # 44 ¿ + IGNORE;IGNORE;IGNORE; # 45 / + IGNORE;IGNORE;IGNORE; # 46 <"/> + IGNORE;IGNORE;IGNORE; # 47 . + IGNORE;IGNORE;IGNORE; # 58 × + IGNORE;IGNORE;IGNORE; # 59 ¸ + IGNORE;IGNORE;IGNORE; # 60 <";> + IGNORE;IGNORE;IGNORE; # 61 ' + IGNORE;IGNORE;IGNORE; # 62 <'6> + IGNORE;IGNORE;IGNORE; # 63 <'9> + IGNORE;IGNORE;IGNORE; # 64 " + IGNORE;IGNORE;IGNORE; # 65 <"6> + IGNORE;IGNORE;IGNORE; # 66 <"9> + IGNORE;IGNORE;IGNORE; # 67 « + IGNORE;IGNORE;IGNORE; # 68 » + IGNORE;IGNORE;IGNORE; # 69 ( + IGNORE;IGNORE;IGNORE; # 70 <(S> + IGNORE;IGNORE;IGNORE; # 71 ) + IGNORE;IGNORE;IGNORE; # 72 <)S> + IGNORE;IGNORE;IGNORE; # 73 [ + IGNORE;IGNORE;IGNORE; # 74 ] + IGNORE;IGNORE;IGNORE; # 75 { + IGNORE;IGNORE;IGNORE; # 76 } + IGNORE;IGNORE;IGNORE; # 77 § + IGNORE;IGNORE;IGNORE; # 78 ¶ + IGNORE;IGNORE;IGNORE; # 79 © + IGNORE;IGNORE;IGNORE; # 80 ® + IGNORE;IGNORE;IGNORE; # 81 + IGNORE;IGNORE;IGNORE; # 82 @ + IGNORE;IGNORE;IGNORE; # 83 ¤ + IGNORE;IGNORE;IGNORE; # 84 ¢ + IGNORE;IGNORE;IGNORE; # 85 $ + IGNORE;IGNORE;IGNORE; # 86 £ + IGNORE;IGNORE;IGNORE; # 87 ¥ + IGNORE;IGNORE;IGNORE; # 88 * + IGNORE;IGNORE;IGNORE; # 89 \ + IGNORE;IGNORE;IGNORE; # 90 & + IGNORE;IGNORE;IGNORE; # 91 # + IGNORE;IGNORE;IGNORE; # 92 % + IGNORE;IGNORE;IGNORE; # 93 <-S> + IGNORE;IGNORE;IGNORE; # 94 + + IGNORE;IGNORE;IGNORE; # 95 <+S> + IGNORE;IGNORE;IGNORE; # 96 ± + IGNORE;IGNORE;IGNORE;<0> # 123 ´ + IGNORE;IGNORE;IGNORE;<1> # 124 ` + IGNORE;IGNORE;IGNORE;<2> # 125 <"(> + IGNORE;IGNORE;IGNORE;<3> # 126 ^ + IGNORE;IGNORE;IGNORE;<4> # 127 <"<> + IGNORE;IGNORE;IGNORE;<5> # 128 <"0> + IGNORE;IGNORE;IGNORE;<6> # 129 ¨ + IGNORE;IGNORE;IGNORE;<7> # 130 <""> + IGNORE;IGNORE;IGNORE;<8> # 131 ~ + IGNORE;IGNORE;IGNORE;<9> # 132 <".> + IGNORE;IGNORE;IGNORE; # 133 ¸ + IGNORE;IGNORE;IGNORE; # 134 ´ + IGNORE;IGNORE;IGNORE; # 135 + IGNORE;IGNORE;IGNORE; # 136 < + IGNORE;IGNORE;IGNORE; # 137 <=<> + IGNORE;IGNORE;IGNORE; # 138 = + IGNORE;IGNORE;IGNORE; # 139 => + IGNORE;IGNORE;IGNORE; # 140 > + IGNORE;IGNORE;IGNORE; # 141 ¬ + IGNORE;IGNORE;IGNORE; # 142 | + IGNORE;IGNORE;IGNORE; # 143 | + IGNORE;IGNORE;IGNORE; # 144 ° + IGNORE;IGNORE;IGNORE; # 145 m + IGNORE;IGNORE;IGNORE; # 146 + IGNORE;IGNORE;IGNORE; # 147 + IGNORE;IGNORE;IGNORE;

# 148 <_V/>> + IGNORE;IGNORE;IGNORE; # 149 <_V-> + IGNORE;IGNORE;IGNORE; # 150 <_V + IGNORE;IGNORE;IGNORE; # 151 <_!/>> + IGNORE;IGNORE;IGNORE; # 152 <_!-> + IGNORE;IGNORE;IGNORE; # 153 <_!<> + IGNORE;IGNORE;IGNORE; # 154 <_A/>> + IGNORE;IGNORE;IGNORE; # 155 <_-A> + IGNORE;IGNORE;IGNORE; # 156 <_A<> + IGNORE;IGNORE;IGNORE; # 157 <_!> + IGNORE;IGNORE;IGNORE; # 158 <_-> # + IGNORE;IGNORE;IGNORE; # 159 <_=> + IGNORE;IGNORE;IGNORE; # 160 <<-> + IGNORE;IGNORE;IGNORE; # 161 <-/>> + IGNORE;IGNORE;IGNORE; # 162 <"7> + IGNORE;IGNORE;IGNORE; # 163 <-!> + IGNORE;IGNORE;IGNORE; # 164 <-v> + IGNORE;IGNORE;IGNORE; # 165 <_d!> + IGNORE;IGNORE;IGNORE; # 166 <_/>//> + IGNORE;IGNORE;IGNORE; # 167 <_<\> + IGNORE;IGNORE;IGNORE; # 168 <_./>//> + IGNORE;IGNORE;IGNORE; # 169 <_.<\> # # / # + IGNORE;IGNORE;IGNORE; + IGNORE;IGNORE;IGNORE; + IGNORE;IGNORE;IGNORE; + IGNORE;IGNORE;IGNORE; + IGNORE;IGNORE;IGNORE; + IGNORE;IGNORE;IGNORE; + IGNORE;IGNORE;IGNORE; + IGNORE;IGNORE;IGNORE; + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # + IGNORE;IGNORE;IGNORE; # # # # + IGNORE;IGNORE;IGNORE; #point_sheva + IGNORE;IGNORE;IGNORE; #point_hataf_segol + IGNORE;IGNORE;IGNORE; #point_hataf_patah + IGNORE;IGNORE;IGNORE; #point_hataf_qamats + IGNORE;IGNORE;IGNORE; #point_hiriq + IGNORE;IGNORE;IGNORE; #point_tsere + IGNORE;IGNORE;IGNORE; #point_segol + IGNORE;IGNORE;IGNORE; #point_patah + IGNORE;IGNORE;IGNORE; #point_qamats + IGNORE;IGNORE;IGNORE; #point_holam + IGNORE;IGNORE;IGNORE; #point_qubuts + IGNORE;IGNORE;IGNORE; #point_dagesh + IGNORE;IGNORE;IGNORE; #point_meteg + IGNORE;IGNORE;IGNORE; #maqaf + IGNORE;IGNORE;IGNORE; #point_rafe + IGNORE;IGNORE;IGNORE; #paseq + IGNORE;IGNORE;IGNORE; #point_shin_dot + IGNORE;IGNORE;IGNORE; #point_sin_dot + IGNORE;IGNORE;IGNORE; #sof pasuq + +order_start ;forward;backward;forward;forward,position +# + U0020;;;IGNORE # 170 +# + <0>;;;IGNORE # 171 0 + <1>;;;IGNORE # 172 1 + <2>;;;IGNORE # 173 2 + <3>;;;IGNORE # 174 3 + <4>;;;IGNORE # 175 4 + <5>;;;IGNORE # 176 5 + <6>;;;IGNORE # 177 6 + <7>;;;IGNORE # 178 7 + <8>;;;IGNORE # 179 8 + <9>;;;IGNORE # 180 9 +# + <0>;;;IGNORE # 181 <18> + <0>;;;IGNORE # 182 ¼ + <0>;;;IGNORE # 183 <38> + <0>;;;IGNORE # 184 <58> + <0>;;;IGNORE # 185 <78> + <0>;;;IGNORE # 186 ½ + <0>;;;IGNORE # 187 ¾ + <0>;;;IGNORE # 188 <0S> + <1>;;;IGNORE # 189 ¹ + <2>;;;IGNORE # 190 ² + <3>;;;IGNORE # 191 ³ + <4>;;;IGNORE # 192 <4S> + <5>;;;IGNORE # 193 <5S> + <6>;;;IGNORE # 194 <6S> + <7>;;;IGNORE # 195 <7S> + <8>;;;IGNORE # 196 <8S> + <9>;;;IGNORE # 197 <9S> +# + ;;;IGNORE # 198 a + ;;;IGNORE # 199 ª + ;;;IGNORE # 200 á + ;;;IGNORE # 201 à + ;;;IGNORE # 202 â + ;;;IGNORE # 203 ã + ;;;IGNORE # 204 ä + ;;;IGNORE # 205 å + ;;;IGNORE # 206 + ;;;IGNORE # 207 + ;;;IGNORE # 208 + ;;;IGNORE # 209 æ + ;;;IGNORE # 210 b + ;;;IGNORE # 211 c + ;;;IGNORE # 212 ç + ;;;IGNORE # 213 + ;;;IGNORE # 214 > + ;;;IGNORE # 215 + ;;;IGNORE # 216 + ;;;IGNORE # 217 d + ;;;IGNORE # 218 ð + ;;;IGNORE # 219 + ;;;IGNORE # 220 + ;;;IGNORE # 221 e + ;;;IGNORE # 222 é + ;;;IGNORE # 223 è + ;;;IGNORE # 224 ê + ;;;IGNORE # 225 ë + ;;;IGNORE # 226 + ;;;IGNORE # 227 + ;;;IGNORE # 228 + ;;;IGNORE # 229 + ;;;IGNORE # 230 f + ;;;IGNORE # 231 g + ;;;IGNORE # 232 + ;;;IGNORE # 233 > + ;;;IGNORE # 234 + ;;;IGNORE # 235 + ;;;IGNORE # 236 h + ;;;IGNORE # 237 > + ;;;IGNORE # 238 + ;;;IGNORE # 239 i + ;;;IGNORE # 240 í + ;;;IGNORE # 241 ì + ;;;IGNORE # 242 î + ;;;IGNORE # 243 ï + ;;;IGNORE # 244 + ;;;IGNORE # 245 + ;;;IGNORE # 246 + ;;;IGNORE # 247 + ;;;IGNORE # 248 + ;;;IGNORE # 249 j + ;;;IGNORE # 250 > + ;;;IGNORE # 251 k + ;;;IGNORE # 252 + ;;;IGNORE # 253 + ;;;IGNORE # 254 l + ;;;IGNORE # 255 + ;;;IGNORE # 256 + ;;;IGNORE # 257 + ;;;IGNORE # 258 + ;;;IGNORE # 259 + ;;;IGNORE # 260 m + ;;;IGNORE # 261 n + ;;;IGNORE # 262 ñ + ;;;IGNORE # 263 <'n> + ;;;IGNORE # 264 + ;;;IGNORE # 265 + ;;;IGNORE # 266 + ;;;IGNORE # 267 + ;;;IGNORE # 268 o + ;;;IGNORE # 269 º + ;;;IGNORE # 270 ó + ;;;IGNORE # 271 ò + ;;;IGNORE # 272 ô + ;;;IGNORE # 273 õ + ;;;IGNORE # 274 ö + ;;;IGNORE # 275 ø + ;;;IGNORE # 276 + ;;;IGNORE # 277 + ;;;IGNORE # 278 +

;;;IGNORE # 279 p + ;;;IGNORE # 280 q + ;;;IGNORE # 281 r + ;;;IGNORE # 282 + ;;;IGNORE # 283 + ;;;IGNORE # 284 + ;;;IGNORE # 285 s + ;;;IGNORE # 286 + ;;;IGNORE # 287 > + ;;;IGNORE # 288 + ;;;IGNORE # 289 + ;;;IGNORE # 290 ß + ;;;IGNORE # 291 t + ;;;IGNORE # 292 + ;;;IGNORE # 293 + ;;;IGNORE # 294 + ;;;IGNORE # 296 u + ;;;IGNORE # 297 ú + ;;;IGNORE # 298 ù + ;;;IGNORE # 299 û + ;;;IGNORE # 300 ü + ;;;IGNORE # 301 + ;;;IGNORE # 302 + ;;;IGNORE # 303 + ;;;IGNORE # 304 + ;;;IGNORE # 305 + ;;;IGNORE # 306 + ;;;IGNORE # 307 v + ;;;IGNORE # 308 w + ;;;IGNORE # 309 > + ;;;IGNORE # 310 x + ;;;IGNORE # 311 y + ;;;IGNORE # 312 ý + ;;;IGNORE # 313 _ + ;;;IGNORE # 314 > + ;;;IGNORE # 315 z + ;;;IGNORE # 316 + ;;;IGNORE # 317 + ;;;IGNORE # 318 + ;;;IGNORE # 318b Þ # + ;;;IGNORE # 319 A + ;;;IGNORE # 320 Á + ;;;IGNORE # 321 À + ;;;IGNORE # 322 Â + ;;;IGNORE # 323 Ã + ;;;IGNORE # 324 Ä + ;;;IGNORE # 325 Å + ;;;IGNORE # 326 + ;;;IGNORE # 327 + ;;;IGNORE # 328 + ;;;IGNORE # 329 Æ + ;;;IGNORE # 330 B + ;;;IGNORE # 331 C + ;;;IGNORE # 332 Ç + ;;;IGNORE # 333 + ;;;IGNORE # 334 > + ;;;IGNORE # 335 > + ;;;IGNORE # 336 + ;;;IGNORE # 337 D + ;;;IGNORE # 338 Ð + ;;;IGNORE # 339 + ;;;IGNORE # 340 + ;;;IGNORE # 341 E + ;;;IGNORE # 342 É + ;;;IGNORE # 343 È + ;;;IGNORE # 344 Ê + ;;;IGNORE # 345 Ë + ;;;IGNORE # 346 + ;;;IGNORE # 347 + ;;;IGNORE # 348 + ;;;IGNORE # 349 + ;;;IGNORE # 350 F + ;;;IGNORE # 351 G + ;;;IGNORE # 352 + ;;;IGNORE # 353 > + ;;;IGNORE # 354 + ;;;IGNORE # 355 + ;;;IGNORE # 356 H + ;;;IGNORE # 357 > + ;;;IGNORE # 358 + ;;;IGNORE # 359 I + ;;;IGNORE # 360 Í + ;;;IGNORE # 361 Ì + ;;;IGNORE # 362 Î + ;;;IGNORE # 363 Ï + ;;;IGNORE # 364 + ;;;IGNORE # 365 + ;;;IGNORE # 366 + ;;;IGNORE # 367 + ;;;IGNORE # 368 + ;;;IGNORE # 369 J + ;;;IGNORE # 370 > + ;;;IGNORE # 371 K + ;;;IGNORE # 372 + ;;;IGNORE # 373 L + ;;;IGNORE # 374 + ;;;IGNORE # 375 + ;;;IGNORE # 376 + ;;;IGNORE # 377 + ;;;IGNORE # 378 + ;;;IGNORE # 379 M + ;;;IGNORE # 380 N + ;;;IGNORE # 381 Ñ + ;;;IGNORE # 382 + ;;;IGNORE # 383 + ;;;IGNORE # 384 + ;;;IGNORE # 385 + ;;;IGNORE # 386 O + ;;;IGNORE # 387 Ó + ;;;IGNORE # 388 Ò + ;;;IGNORE # 389 Ô + ;;;IGNORE # 390 Õ + ;;;IGNORE # 391 Ö + ;;;IGNORE # 392 Ø + ;;;IGNORE # 393 + ;;;IGNORE # 394 + ;;;IGNORE # 395 +

;;;IGNORE # 396 P + ;;;IGNORE # 397 Q + ;;;IGNORE # 398 R + ;;;IGNORE # 399 + ;;;IGNORE # 400 + ;;;IGNORE # 401 + ;;;IGNORE # 402 S + ;;;IGNORE # 403 + ;;;IGNORE # 404 > + ;;;IGNORE # 405 + ;;;IGNORE # 406 + ;;;IGNORE # 407 T + ;;;IGNORE # 408 + ;;;IGNORE # 409 + ;;;IGNORE # 410 + ;;;IGNORE # 412 U + ;;;IGNORE # 413 Ú + ;;;IGNORE # 414 Ù + ;;;IGNORE # 415 Û + ;;;IGNORE # 416 Ü + ;;;IGNORE # 417 + ;;;IGNORE # 418 + ;;;IGNORE # 419 + ;;;IGNORE # 420 + ;;;IGNORE # 421 + ;;;IGNORE # 422 + ;;;IGNORE # 423 V + ;;;IGNORE # 424 W + ;;;IGNORE # 425 > + ;;;IGNORE # 426 X + ;;;IGNORE # 427 Y + ;;;IGNORE # 428 Ý + ;;;IGNORE # 429 > + ;;;IGNORE # 430 + ;;;IGNORE # 431 Z + ;;;IGNORE # 432 + ;;;IGNORE # 433 + ;;;IGNORE # 434 + ;;;IGNORE # 411 þ + +order_start ;forward;forward;forward;forward,position + <0>;;;IGNORE + <0>;;;IGNORE + <1>;;;IGNORE + <1>;;;IGNORE + <2>;;;IGNORE + <2>;;;IGNORE + <3>;;;IGNORE + <3>;;;IGNORE + <4>;;;IGNORE + <4>;;;IGNORE + <5>;;;IGNORE + <5>;;;IGNORE + <6>;;;IGNORE + <6>;;;IGNORE + <7>;;;IGNORE + <7>;;;IGNORE + <8>;;;IGNORE + <8>;;;IGNORE + <9>;;;IGNORE + <9>;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + >;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + +order_start ;backward;backward;backward;forward,position + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE ;;;IGNORE + ;;;IGNORE ;;;IGNORE + ;;;IGNORE ;;;IGNORE + ;;;IGNORE ;;;IGNORE + ;;;IGNORE ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;;IGNORE + ;;;;IGNORE + ;;;;IGNORE + ;;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + +order_start ;forward;forward;forward;forward,position + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + ;;IGNORE;IGNORE + +order_start ;forward;backward;forward + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # digamma copte + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # GANGIA COPTE + ;;;IGNORE # gangia copte + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # HORI COPTE + ;;;IGNORE # hori copte + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # yot + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # koppa copte + ;;;IGNORE + ;;;IGNORE # KHEI COPTE + ;;;IGNORE # khei copte + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # STIGMA ARCH. + ;;;IGNORE # SHIMA COPTE + ;;;IGNORE # shima copte + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # DEI COPTE + ;;;IGNORE # dei copte + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # FEI COPTE + ;;;IGNORE # fei copte + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # sampi copte + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE # SHEI COPTE + ;;;IGNORE # shei copte + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + +order_start ;forward;forward;forward;forward,position + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + +order_start ;forward;forward;forward;forward,position +...... ......;IGNORE;IGNORE;IGNORE +# +order_end +# +END LC_COLLATE diff --git a/posix/fnmatch.c b/posix/fnmatch.c index 18abf5da27..c4b11080fe 100644 --- a/posix/fnmatch.c +++ b/posix/fnmatch.c @@ -48,6 +48,15 @@ # include #endif +/* We need some of the locale data (the collation sequence information) + but there is no interface to get this information in general. Therefore + we support a correct implementation only in glibc. */ +#ifdef _LIBC +# include "../locale/localeinfo.h" + +# define CONCAT(a,b) __CONCAT(a,b) +#endif + /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling @@ -192,6 +201,7 @@ __wcschrnul (s, c) # define STRCHR(S, C) strchr (S, C) # define STRCHRNUL(S, C) __strchrnul (S, C) # define STRCOLL(S1, S2) strcoll (S1, S2) +# define SUFFIX MB # include "fnmatch_loop.c" @@ -209,7 +219,10 @@ __wcschrnul (s, c) # define BTOWC(C) (C) # define STRCHR(S, C) wcschr (S, C) # define STRCHRNUL(S, C) __wcschrnul (S, C) -# define STRCOLL(S1, S2) wcscoll (S1, S2) +# define STRCOLL(S1, S2) wcscoll (S1, S2) +# define SUFFIX WC +# define WIDE_CHAR_VERSION 1 + # undef IS_CHAR_CLASS # ifdef _LIBC diff --git a/posix/fnmatch_loop.c b/posix/fnmatch_loop.c index 5f6c05710e..831bd0631a 100644 --- a/posix/fnmatch_loop.c +++ b/posix/fnmatch_loop.c @@ -31,6 +31,16 @@ FCT (pattern, string, no_leading_period, flags) { register const CHAR *p = pattern, *n = string; register UCHAR c; +#ifdef _LIBC + const UCHAR *collseq = (const UCHAR *) + _NL_CURRENT(LC_COLLATE, CONCAT(_NL_COLLATE_COLLSEQ,SUFFIX)); +# ifdef WIDE_CHAR_VERSION + const wint_t *names = (const wint_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_NAMES); + size_t size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_HASH_SIZE); + size_t layers = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_HASH_LAYERS); +# endif +#endif while ((c = *p++) != L('\0')) { @@ -210,9 +220,9 @@ FCT (pattern, string, no_leading_period, flags) /* Leave room for the null. */ CHAR str[CHAR_CLASS_MAX_LENGTH + 1]; size_t c1 = 0; -# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) +#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) wctype_t wt; -# endif +#endif const CHAR *startp = p; for (;;) @@ -240,7 +250,7 @@ FCT (pattern, string, no_leading_period, flags) } str[c1] = L('\0'); -# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) +#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) wt = IS_CHAR_CLASS (str); if (wt == 0) /* Invalid character class name. */ @@ -248,7 +258,7 @@ FCT (pattern, string, no_leading_period, flags) if (ISWCTYPE (BTOWC ((UCHAR) *n), wt)) goto matched; -# else +#else if ((STREQ (str, L("alnum")) && ISALNUM ((UCHAR) *n)) || (STREQ (str, L("alpha")) && ISALPHA ((UCHAR) *n)) || (STREQ (str, L("blank")) && ISBLANK ((UCHAR) *n)) @@ -262,7 +272,7 @@ FCT (pattern, string, no_leading_period, flags) || (STREQ (str, L("upper")) && ISUPPER ((UCHAR) *n)) || (STREQ (str, L("xdigit")) && ISXDIGIT ((UCHAR) *n))) goto matched; -# endif +#endif } else if (c == L('\0')) /* [ (unterminated) loses. */ @@ -279,27 +289,117 @@ FCT (pattern, string, no_leading_period, flags) if (c == L('-') && *p != L(']')) { - /* It is a range. */ - CHAR lo[2]; - CHAR fc[2]; +#if _LIBC + /* We have to find the collation sequence + value for C. Collation sequence is nothing + we can regularly access. The sequence + value is defined by the order in which the + definitions of the collation values for the + various characters appear in the source + file. A strange concept, nowhere + documented. */ + int32_t fseqidx; + int32_t lseqidx; UCHAR cend = *p++; +# ifdef WIDE_CHAR_VERSION + size_t cnt; +# endif + if (!(flags & FNM_NOESCAPE) && cend == L('\\')) cend = *p++; if (cend == L('\0')) return FNM_NOMATCH; - lo[0] = cold; - lo[1] = L('\0'); - fc[0] = fn; - fc[1] = L('\0'); - if (STRCOLL (lo, fc) <= 0) +# ifdef WIDE_CHAR_VERSION + /* Search in the `names' array for the characters. */ + fseqidx = fn % size; + cnt = 0; + while (names[fseqidx] != fn) { - CHAR hi[2]; - hi[0] = FOLD (cend); - hi[1] = L('\0'); - if (STRCOLL (fc, hi) <= 0) + if (++cnt == layers) + /* XXX We don't know anything about + the character we are supposed to + match. This means we are failing. */ + goto range_not_matched; + + fseqidx += size; + } + lseqidx = cold % size; + cnt = 0; + while (names[lseqidx] != cold) + { + if (++cnt == layers) + { + lseqidx = -1; + break; + } + lseqidx += size; + } +# else + fseqidx = fn; + lseqidx = cold; +# endif + + /* XXX It is not entirely clear to me how to handle + characters which are not mentioned in the + collation specification. */ + if ( +# ifdef WIDE_CHAR_VERSION + lseqidx == -1 || +# endif + collseq[lseqidx] <= collseq[fseqidx]) + { + /* We have to look at the upper bound. */ + int32_t hseqidx; + + cend = FOLD (cend); +# ifdef WIDE_CHAR_VERSION + hseqidx = cend % size; + cnt = 0; + while (names[hseqidx] != cend) + { + if (++cnt == layers) + { + /* Hum, no information about the upper + bound. The matching succeeds if the + lower bound is matched exactly. */ + if (lseqidx == -1 || cold != fn) + goto range_not_matched; + + goto matched; + } + } +# else + hseqidx = cend; +# endif + + if ( +# ifdef WIDE_CHAR_VERSION + (lseqidx == -1 + && collseq[fseqidx] == collseq[hseqidx]) || +# endif + collseq[fseqidx] <= collseq[hseqidx]) goto matched; } +# ifdef WIDE_CHAR_VERSION + range_not_matched: +# endif +#else + /* We use a boring value comparison of the character + values. This is better than comparing using + `strcoll' since the latter would have surprising + and sometimes fatal consequences. */ + UCHAR cend = *p++; + + if (!(flags & FNM_NOESCAPE) && cend == L('\\')) + cend = *p++; + if (cend == L('\0')) + return FNM_NOMATCH; + + /* It is a range. */ + if (cold <= fc && fc <= c) + goto matched; +#endif c = *p++; } @@ -371,3 +471,4 @@ FCT (pattern, string, no_leading_period, flags) #undef STRCOLL #undef L #undef BTOWC +#undef SUFFIX

+collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +# +# / +# +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +# +# +# +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +# +# GREC +# +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +# +# CYRIL +# +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol +collating-symbol + +# Ordre des symboles internes / Order of internal symbols +# +# SYMB. N° +# + + +# forme de base (bas de casse, arabe intrinsèque, +# hébreu intrinsèque, etc. +# basic form (lower case, intrinsic Arabic +# intrinsic Hebrew and so on) +# +# / +# +# + # voir + + # isol. +# 3 + # final +# 4 + # initial +# 5 + # medial/mdian +# 6 +# + # 7 + # 8 + # 9 + # 10 + # 11 + +#alternate lower case/ +# 12 +# +#minuscules spéciales après majuscules +# / +# + # accent madda #13 + # accent hamza #14 + # accent hamza/waw #14 1 + # accent hamza under / hamza souscrit #14 2 + # accent under yeh / accent souscrit du ya' #14 3 + # accent hamza/yeh barree #14 4 +# + # 15 +# + # 16 + # 17 + # 18 + # 19 + # 20 + # 21 + # 22 + # 23 + # 24 + # 25 + # 26 + # 27 + # 28 + # 29 + # 30 + # 31 +# +# GREC +# + # accent aigu/tonos/acute accent + # trma/dialytica/diaeresis + # dialytika tonos +# +<0> # 48 +<1> # 49 +<2> # 50 +<3> # 51 +<4> # 52 +<5> # 53 +<6> # 54 +<7> # 55 +<8> # 56 +<9> # 57 +# + # 97 + # 98 + # 99 + # 100 + # 101 + # 102 + # 103 + # 104 + # 105 + # 106 + # 107 + # 108 + # 109 + # 110 + # 111 +