about summary refs log tree commit diff
path: root/posix
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-09-05 10:28:51 +0000
committerUlrich Drepper <drepper@redhat.com>2002-09-05 10:28:51 +0000
commit92b27c7470ca2844e4e1265746cb56ad1f664df3 (patch)
tree989027a0a57d82034206d3e2bbb7a4151dd2e24f /posix
parent75e4a282218ce382d0fb3ff1ffef2108dd84fcce (diff)
downloadglibc-92b27c7470ca2844e4e1265746cb56ad1f664df3.tar.gz
glibc-92b27c7470ca2844e4e1265746cb56ad1f664df3.tar.xz
glibc-92b27c7470ca2844e4e1265746cb56ad1f664df3.zip
Update.
2002-07-29  Steven Munroe  <sjmunroe@us.ibm.com>

	* sysdeps/powerpc/__longjmp.S: Moved to...
	* sysdeps/powerpc/powerpc32/__longjmp.S: ...here.
	* sysdeps/powerpc/add_n.S: Moved to...
	* sysdeps/powerpc/powerpc32/add_n.S: ...here.
	* sysdeps/powerpc/addmul_1.S: Moved to...
	* sysdeps/powerpc/powerpc32/addmul_1.S: ...here.
	* sysdeps/powerpc/atomicity.h: Moved to...
	* sysdeps/powerpc/powerpc32/atomicity.h: ...here.
	* sysdeps/powerpc/backtrace.c: Moved to...
	* sysdeps/powerpc/powerpc32/backtrace.c: ...here.
	* sysdeps/powerpc/bp-asm.h: Moved to...
	* sysdeps/powerpc/powerpc32/bp-asm.h: ...here.
	* sysdeps/powerpc/bsd-_setjmp.S: Moved to...
	* sysdeps/powerpc/powerpc32/bsd-_setjmp.S: ...here.
	* sysdeps/powerpc/bsd-setjmp.S: Moved to...
	* sysdeps/powerpc/powerpc32/bsd-setjmp.S: ...here.
	* sysdeps/powerpc/dl-machine.c: Moved to...
	* sysdeps/powerpc/powerpc32/dl-machine.c: ...here.
	* sysdeps/powerpc/dl-machine.h: Moved to...
	* sysdeps/powerpc/powerpc32/dl-machine.h: ...here.
	* sysdeps/powerpc/dl-start.S: Moved to...
	* sysdeps/powerpc/powerpc32/dl-start.S: ...here.
	* sysdeps/powerpc/gprrest0.S: Moved to...
	* sysdeps/powerpc/powerpc32/gprrest0.S: ...here.
	* sysdeps/powerpc/gprrest1.S: Moved to...
	* sysdeps/powerpc/powerpc32/gprrest1.S: ...here.
	* sysdeps/powerpc/gprsave0.S: Moved to...
	* sysdeps/powerpc/powerpc32/gprsave0.S: ...here.
	* sysdeps/powerpc/gprsave1.S: Moved to...
	* sysdeps/powerpc/powerpc32/gprsave1.S: ...here.
	* sysdeps/powerpc/lshift.S: Moved to...
	* sysdeps/powerpc/powerpc32/lshift.S: ...here.
	* sysdeps/powerpc/memset.S: Moved to...
	* sysdeps/powerpc/powerpc32/memset.S: ...here.
	* sysdeps/powerpc/mul_1.S: Moved to...
	* sysdeps/powerpc/powerpc32/mul_1.S: ...here.
	* sysdeps/powerpc/ppc-mcount.S: Moved to...
	* sysdeps/powerpc/powerpc32/ppc-mcount.S: ...here.
	* sysdeps/powerpc/register-dump.h: Moved to...
	* sysdeps/powerpc/powerpc32/register-dump.h: ...here.
	* sysdeps/powerpc/rshift.S: Moved to...
	* sysdeps/powerpc/powerpc32/rshift.S: ...here.
	* sysdeps/powerpc/setjmp.S: Moved to...
	* sysdeps/powerpc/powerpc32/setjmp.S: ...here.
	* sysdeps/powerpc/stpcpy.S: Moved to...
	* sysdeps/powerpc/powerpc32/stpcpy.S: ...here.
	* sysdeps/powerpc/strchr.S: Moved to...
	* sysdeps/powerpc/powerpc32/strchr.S: ...here.
	* sysdeps/powerpc/strcmp.S: Moved to...
	* sysdeps/powerpc/powerpc32/strcmp.S: ...here.
	* sysdeps/powerpc/strcpy.S: Moved to...
	* sysdeps/powerpc/powerpc32/strcpy.S: ...here.
	* sysdeps/powerpc/strlen.S: Moved to...
	* sysdeps/powerpc/powerpc32/strlen.S: ...here.
	* sysdeps/powerpc/sub_n.S: Moved to...
	* sysdeps/powerpc/powerpc32/sub_n.S: ...here.
	* sysdeps/powerpc/submul_1.S: Moved to...
	* sysdeps/powerpc/powerpc32/submul_1.S: ...here.
	* sysdeps/powerpc/elf/bzero.S: Moved to...
	* sysdeps/powerpc/powerpc32/elf/bzero.S: ...here.
	* sysdeps/powerpc/elf/start.S: Moved to...
	* sysdeps/powerpc/powerpc32/elf/start.S: ...here.
	* sysdeps/powerpc/fpu/__longjmp.S: Moved to...
	* sysdeps/powerpc/powerpc32/fpu/__longjmp.S: ...here.
	* sysdeps/powerpc/fpu/fprrest.S: Moved to...
	* sysdeps/powerpc/powerpc32/fpu/fprrest.S: ...here.
	* sysdeps/powerpc/fpu/fprsave.S: Moved to...
	* sysdeps/powerpc/powerpc32/fpu/fprsave.S: ...here.
	* sysdeps/powerpc/fpu/setjmp.S: Moved to...
	* sysdeps/powerpc/powerpc32/fpu/setjmp.S: ...here.
	* sysdeps/powerpc/fpu/s_copysign.S: Moved to...
	* sysdeps/powerpc/powerpc32/fpu/s_copysign.S: ...here.
	* sysdeps/powerpc/fpu/s_copysignf.S: Moved to...
	* sysdeps/powerpc/powerpc32/fpu/s_copysignf.S: ...here.
	* sysdeps/unix/sysv/linux/powerpc/brk.S: Moved to...
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S: ...here.
	* sysdeps/unix/sysv/linux/powerpc/clone.S: Moved to...
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S: ...here.
	* sysdeps/unix/sysv/linux/powerpc/glob64.c: Moved to...
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/glob64.c: ...here.
	* sysdeps/unix/sysv/linux/powerpc/kernel_stat.h: Moved to...
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/kernel_stat.h: ...here.
	* sysdeps/unix/sysv/linux/powerpc/socket.S: Moved to...
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S: ...here.
	* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Moved to...
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h: ...here.
	* sysdeps/unix/sysv/linux/powerpc/syscalls.list: Moved to...
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list: ...here.
	Support PowerPC64.  Separate powerpc into powerpc/powerpc32 and
	powerpc/powerpc64.

2002-07-29  Steven Munroe  <sjmunroe@us.ibm.com>

	* FAQ.in: Add powerpc64 to supported targets list. Also state the
	minimum gcc version is 3.2
	* README: Add powerpc64 to supported targets list.
	* configure.in: Change machine=powerpc to machine=powerpc/powerpc32.
	Add powerpc64 and machine=powerpc/powerpc64.
	(HAVE_ASM_GLOBAL_DOT_NAME): Define if linux*powerpc/powerpc64*.
	* shlib-versions: Set DEFAULT version to 2.2.5 for powerpc64.
	* sysdeps/powerpc/Dist: Remove dl-machine.c, dl-start.S, ppc-mcount.S,
	gprsave1.S, gprsave0.S, gprrest1.S, and gprrest0.S.
	* sysdeps/powerpc/powerpc32/Dist: New file.
	* sysdeps/powerpc/Implies: Remove wordsize-32 and powerpc/soft-fp.
	* sysdeps/powerpc/powerpc32/Implies: New file.
	* sysdeps/powerpc/Makefile(cflags): Remove powerpc32 specific cflags.
	($(with-fp) = no): Move test to powerpc32/Makefile.
	($(subdir) = misc): Move to powerpc32/Makefile.
	($(build-shared) = yes): Move to powerpc32/Makefile.
	($(subdir) = csu): Move to powerpc32/Makefile.
	(sysdep-rtld-routines): Remove dl-start.  Moved these bits to ...
	* sysdeps/powerpc/powerpc32/Makefile: New file.
	* sysdeps/powerpc/Versions: Remove libgcc functions.
	* sysdeps/powerpc/powerpc32/Versions: New file.
	* sysdeps/powerpc/fpu/Makefile: Remove fprsave and fprrest.
	* sysdeps/powerpc/powerpc32/fpu/Makefile: New file.
	* sysdeps/unix/sysv/linux/configure.in (powerpc*):
	Set arch_minimum_kernel=2.4.19 for powerpc/powerpc64. Also set
	libc_cv_gcc_unwind_find_fde=yes only if !powerpc/powerpc64.
	($machine): Add powerpc/powerpc64 to if ... | for
	libc_cv_slibdir=/libc64.
	(powerpc*): Set ldd_rewrite_script.
	* sysdeps/unix/sysv/linux/powerpc/ldd-rewrite.sed: New file.
	* sysdeps/unix/sysv/linux/powerpc/Dist: Remove clone.S.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/Dist: New file.
	Add clone.S.
	* sysdeps/unix/sysv/linux/powerpc/Makefile: Remove oldgetrlimit64.
	* sysdeps/unix/sysv/linux/powerpc/Versions: Remove GLIBC_2.0
	functions.  Remove GLIBC_2.2 functions except getrlimit and
	setrlimit.  Moved them to ...
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/Versions: New file.

2002-09-04  Ulrich Drepper  <drepper@redhat.com>

	* libio/tst-atime.c: Include <errno.h>.
	(do_test): Only perform fstatvfs check if ST_NOATIME is defined.

2002-09-03  Isamu Hasegawa  <isamu@yamato.ibm.com>

	* posix/regcomp.c (regcomp): Append "__restrict" modifier to avoid
	warnings of some compilers.
	(build_collating_symbol): Change the type of characters from
	"unsigned char"	to "char", and append a cast to "char*" pointer in
	array subscript.
	(build_collating_symbol): Likewise.
	(build_equiv_class): Likewise.
	(build_charclass): Likewise.
	(re_compile_pattern): Remove incorrect cast.
	(re_compile_fastmap_iter): Change the type of characters from
	"unsigned char"	to "char", and append a cast to "char*" pointer
	in array subscript.
	(parse_bracket_exp): Likewise.
	* posix/regex_internal.c (re_string_construct_common): Likewise.
	(re_string_allocate): Likewise.
	(re_string_construct): Likewise.
	(re_string_realloc_buffers): Likewise.
	(build_wcs_buffer): Likewise.
	(re_string_reconstruct): Likewise.
	* posix/regex_internal.h: Change the type of characters in
	re_string_t and bracket_elem_t from "unsigned char" to "char".
	* posix/regexec.c (regexec): Append "__restrict" modifier to avoid
	warnings of some compilers.
	(transit_state_bkref_loop): Change the type of characters from
	"unsigned char"	to "char", and append a cast to "char*" pointer in
	array subscript.
	(check_node_accept_bytes): Likewise.
	(find_collation_sequence_value): Likewise.
Diffstat (limited to 'posix')
-rw-r--r--posix/regex_internal.c29
-rw-r--r--posix/regex_internal.h26
-rw-r--r--posix/regexec.c36
3 files changed, 45 insertions, 46 deletions
diff --git a/posix/regex_internal.c b/posix/regex_internal.c
index 25e7b7e079..c4400a8c23 100644
--- a/posix/regex_internal.c
+++ b/posix/regex_internal.c
@@ -57,8 +57,8 @@
 #include "regex.h"
 #include "regex_internal.h"
 
-static void re_string_construct_common (const unsigned char *str,
-                                        int len, re_string_t *pstr,
+static void re_string_construct_common (const char *str, int len,
+                                        re_string_t *pstr,
                                         RE_TRANSLATE_TYPE trans, int icase);
 #ifdef RE_ENABLE_I18N
 static int re_string_skip_chars (re_string_t *pstr, int new_raw_idx);
@@ -86,7 +86,7 @@ static unsigned int inline calc_state_hash (const re_node_set *nodes,
 static reg_errcode_t
 re_string_allocate (pstr, str, len, init_len, trans, icase)
      re_string_t *pstr;
-     const unsigned char *str;
+     const char *str;
      int len, init_len, icase;
      RE_TRANSLATE_TYPE trans;
 {
@@ -99,8 +99,7 @@ re_string_allocate (pstr, str, len, init_len, trans, icase)
   if (BE (ret != REG_NOERROR, 0))
     return ret;
 
-  pstr->mbs_case = (MBS_CASE_ALLOCATED (pstr) ? pstr->mbs_case
-                    : (unsigned char *)str);
+  pstr->mbs_case = (MBS_CASE_ALLOCATED (pstr) ? pstr->mbs_case : (char *) str);
   pstr->mbs = MBS_ALLOCATED (pstr) ? pstr->mbs : pstr->mbs_case;
   pstr->valid_len = (MBS_CASE_ALLOCATED (pstr) || MBS_ALLOCATED (pstr)
                      || MB_CUR_MAX > 1) ? pstr->valid_len : len;
@@ -112,7 +111,7 @@ re_string_allocate (pstr, str, len, init_len, trans, icase)
 static reg_errcode_t
 re_string_construct (pstr, str, len, trans, icase)
      re_string_t *pstr;
-     const unsigned char *str;
+     const char *str;
      int len, icase;
      RE_TRANSLATE_TYPE trans;
 {
@@ -128,8 +127,7 @@ re_string_construct (pstr, str, len, trans, icase)
       if (BE (ret != REG_NOERROR, 0))
         return ret;
     }
-  pstr->mbs_case = (MBS_CASE_ALLOCATED (pstr) ? pstr->mbs_case
-                    : (unsigned char *)str);
+  pstr->mbs_case = (MBS_CASE_ALLOCATED (pstr) ? pstr->mbs_case : (char *) str);
   pstr->mbs = MBS_ALLOCATED (pstr) ? pstr->mbs : pstr->mbs_case;
 
   if (icase)
@@ -178,13 +176,13 @@ re_string_realloc_buffers (pstr, new_buf_len)
 #endif /* RE_ENABLE_I18N  */
   if (MBS_ALLOCATED (pstr))
     {
-      pstr->mbs = re_realloc (pstr->mbs, unsigned char, new_buf_len);
+      pstr->mbs = re_realloc (pstr->mbs, char, new_buf_len);
       if (BE (pstr->mbs == NULL, 0))
         return REG_ESPACE;
     }
   if (MBS_CASE_ALLOCATED (pstr))
     {
-      pstr->mbs_case = re_realloc (pstr->mbs_case, unsigned char, new_buf_len);
+      pstr->mbs_case = re_realloc (pstr->mbs_case, char, new_buf_len);
       if (BE (pstr->mbs_case == NULL, 0))
         return REG_ESPACE;
       if (!MBS_ALLOCATED (pstr))
@@ -197,7 +195,7 @@ re_string_realloc_buffers (pstr, new_buf_len)
 
 static void
 re_string_construct_common (str, len, pstr, trans, icase)
-     const unsigned char *str;
+     const char *str;
      int len;
      re_string_t *pstr;
      RE_TRANSLATE_TYPE trans;
@@ -256,8 +254,9 @@ build_wcs_buffer (pstr)
       /* Apply the translateion if we need.  */
       if (pstr->trans != NULL && mbclen == 1)
         {
-          int ch =  pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]];
-          pstr->mbs_case[byte_idx] = ch;
+          int ch = *((unsigned char *) pstr->raw_mbs + pstr->raw_mbs_idx
+                     + byte_idx);
+          pstr->mbs_case[byte_idx] = pstr->trans[ch];
         }
       /* Write wide character and padding.  */
       pstr->wcs[byte_idx++] = wc;
@@ -421,9 +420,9 @@ re_string_reconstruct (pstr, idx, eflags, newline)
       pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
                            : CONTEXT_NEWLINE | CONTEXT_BEGBUF);
       if (!MBS_CASE_ALLOCATED (pstr))
-        pstr->mbs_case = (unsigned char *)pstr->raw_mbs;
+        pstr->mbs_case = (char *) pstr->raw_mbs;
       if (!MBS_ALLOCATED (pstr) && !MBS_CASE_ALLOCATED (pstr))
-        pstr->mbs = (unsigned char *)pstr->raw_mbs;
+        pstr->mbs = (char *) pstr->raw_mbs;
       offset = idx;
     }
 
diff --git a/posix/regex_internal.h b/posix/regex_internal.h
index a7f6042935..574bf652b8 100644
--- a/posix/regex_internal.h
+++ b/posix/regex_internal.h
@@ -228,15 +228,15 @@ struct re_string_t
 {
   /* Indicate the raw buffer which is the original string passed as an
      argument of regexec(), re_search(), etc..  */
-  const unsigned char *raw_mbs;
+  const char *raw_mbs;
   /* Store the multibyte string.  In case of "case insensitive mode" like
      REG_ICASE, upper cases of the string are stored, otherwise MBS points
      the same address that RAW_MBS points.  */
-  unsigned char *mbs;
+  char *mbs;
   /* Store the case sensitive multibyte string.  In case of
      "case insensitive mode", the original string are stored,
      otherwise MBS_CASE points the same address that MBS points.  */
-  unsigned char *mbs_case;
+  char *mbs_case;
 #ifdef RE_ENABLE_I18N
   /* Store the wide character string which is corresponding to MBS.  */
   wint_t *wcs;
@@ -275,13 +275,12 @@ typedef struct re_string_t re_string_t;
 #define MBS_CASE_ALLOCATED(pstr) (pstr->trans != NULL)
 
 
-static reg_errcode_t re_string_allocate (re_string_t *pstr,
-                                         const unsigned char *str, int len,
-                                         int init_len,
+static reg_errcode_t re_string_allocate (re_string_t *pstr, const char *str,
+                                         int len, int init_len,
                                          RE_TRANSLATE_TYPE trans, int icase);
-static reg_errcode_t re_string_construct (re_string_t *pstr,
-					  const unsigned char *str, int len,
-                                          RE_TRANSLATE_TYPE trans, int icase);
+static reg_errcode_t re_string_construct (re_string_t *pstr, const char *str,
+                                          int len, RE_TRANSLATE_TYPE trans,
+                                          int icase);
 static reg_errcode_t re_string_reconstruct (re_string_t *pstr, int idx,
                                             int eflags, int newline);
 static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr,
@@ -513,7 +512,7 @@ typedef struct
   union
   {
     unsigned char ch;
-    unsigned char *name;
+    char *name;
     wchar_t wch;
   } opr;
 } bracket_elem_t;
@@ -581,8 +580,7 @@ re_string_elem_size_at (pstr, idx)
      int idx;
 {
 #ifdef _LIBC
-  const unsigned char *p;
-  const char *extra;
+  const char *extra, *p;
   const int32_t *table, *indirect;
   int32_t tmp;
 # include <locale/weight.h>
@@ -595,8 +593,8 @@ re_string_elem_size_at (pstr, idx)
       indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
 						_NL_COLLATE_INDIRECTMB);
       p = pstr->mbs + idx;
-      tmp = findidx (&p);
-      return p - (const unsigned char *) pstr->mbs - idx;
+      tmp = findidx ((const unsigned char **) &p);
+      return p - pstr->mbs - idx;
     }
   else
 #endif /* _LIBC */
diff --git a/posix/regexec.c b/posix/regexec.c
index f9b162b13c..4a9c64a191 100644
--- a/posix/regexec.c
+++ b/posix/regexec.c
@@ -123,7 +123,7 @@ static re_dfastate_t **build_trtable (const regex_t *dfa,
 static int check_node_accept_bytes (const regex_t *preg, int node_idx,
                                     const re_string_t *input, int idx);
 # ifdef _LIBC
-static unsigned int find_collation_sequence_value (const unsigned char *mbs,
+static unsigned int find_collation_sequence_value (const char *mbs,
                                                    size_t name_len);
 # endif /* _LIBC */
 #endif /* RE_ENABLE_I18N */
@@ -153,8 +153,8 @@ static reg_errcode_t extend_buffers (re_match_context_t *mctx);
 
 int
 regexec (preg, string, nmatch, pmatch, eflags)
-    const regex_t *preg;
-    const char *string;
+    const regex_t *__restrict preg;
+    const char *__restrict string;
     size_t nmatch;
     regmatch_t pmatch[];
     int eflags;
@@ -1621,7 +1621,7 @@ transit_state_bkref_loop (preg, nodes, work_state_log, mctx)
 
   for (i = 0; i < nodes->nelem; ++i)
     {
-      unsigned char *buf;
+      char *buf;
       int dest_str_idx, subexp_idx, prev_nelem, subexp_len;
       int node_idx = nodes->elems[i];
       unsigned int context;
@@ -2069,7 +2069,7 @@ check_node_accept_bytes (preg, node_idx, input, str_idx)
     {
       const re_charset_t *cset = node->opr.mbcset;
 # ifdef _LIBC
-      const unsigned char *pin = re_string_get_buffer (input) + str_idx;
+      const char *pin = re_string_get_buffer (input) + str_idx;
 # endif /* _LIBC */
       int match_len = 0;
       wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars)
@@ -2098,18 +2098,17 @@ check_node_accept_bytes (preg, node_idx, input, str_idx)
         {
           unsigned int in_collseq = 0;
           const int32_t *table, *indirect;
-          const unsigned char *weights, *extra, *collseqwc;
+          const char *weights, *extra, *collseqwc;
           int32_t idx;
           /* This #include defines a local function!  */
 #  include <locale/weight.h>
 
           /* match with collating_symbol?  */
           if (cset->ncoll_syms)
-            extra = (const unsigned char *)
-              _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
+            extra = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
           for (i = 0; i < cset->ncoll_syms; ++i)
             {
-              const unsigned char *coll_sym = extra + cset->coll_syms[i];
+              const char *coll_sym = extra + cset->coll_syms[i];
               /* Compare the length of input collating element and
                  the length of current collating element.  */
               if (*coll_sym != elem_len)
@@ -2148,13 +2147,11 @@ check_node_accept_bytes (preg, node_idx, input, str_idx)
           /* match with equivalence_class?  */
           if (cset->nequiv_classes)
             {
-              const unsigned char *cp = pin;
+              const unsigned char *cp = (const unsigned char *) pin;
               table = (const int32_t *)
                 _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
-              weights = (const unsigned char *)
-                _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
-              extra = (const unsigned char *)
-                _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+              weights = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
+              extra = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
               indirect = (const int32_t *)
                 _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
               idx = findidx (&cp);
@@ -2183,7 +2180,12 @@ check_node_accept_bytes (preg, node_idx, input, str_idx)
 # endif /* _LIBC */
         {
           /* match with range expression?  */
-          wchar_t cmp_buf[6] = {L'\0', L'\0', wc, L'\0', L'\0', L'\0'};
+#if __GNUC__ >= 2
+          wchar_t cmp_buf[] = {L'\0', L'\0', wc, L'\0', L'\0', L'\0'};
+#else
+          wchar_t cmp_buf[] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'};
+          cmp_buf[2] = wc;
+#endif
           for (i = 0; i < cset->nranges; ++i)
             {
               cmp_buf[0] = cset->range_starts[i];
@@ -2213,7 +2215,7 @@ check_node_accept_bytes (preg, node_idx, input, str_idx)
 # ifdef _LIBC
 static unsigned int
 find_collation_sequence_value (mbs, mbs_len)
-    const unsigned char *mbs;
+    const char *mbs;
     size_t mbs_len;
 {
   uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
@@ -2224,7 +2226,7 @@ find_collation_sequence_value (mbs, mbs_len)
           /* No valid character.  Match it as a single byte character.  */
           const unsigned char *collseq = (const unsigned char *)
             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB);
-          return collseq[mbs[0]];
+          return collseq[*(unsigned char *) mbs];
         }
       return UINT_MAX;
     }