diff options
Diffstat (limited to 'wctype')
-rw-r--r-- | wctype/wctrans.c | 13 | ||||
-rw-r--r-- | wctype/wctype.h | 5 |
2 files changed, 9 insertions, 9 deletions
diff --git a/wctype/wctrans.c b/wctype/wctrans.c index 3f823e56a8..3c46131f24 100644 --- a/wctype/wctrans.c +++ b/wctype/wctrans.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996. @@ -18,6 +18,7 @@ Boston, MA 02111-1307, USA. */ #include <ctype.h> +#include <inttypes.h> #include <string.h> #include <wctype.h> #include "../locale/localeinfo.h" @@ -27,7 +28,7 @@ wctrans (const char *property) { const char *names; size_t cnt; - unsigned int **result; + int32_t *result; names = _NL_CURRENT (LC_CTYPE, _NL_CTYPE_MAP_NAMES); cnt = 0; @@ -49,11 +50,7 @@ wctrans (const char *property) return (wctrans_t) __ctype_tolower; /* We have to search the table. */ - result = (unsigned int **) &_NL_CURRENT (LC_CTYPE, _NL_CTYPE_WIDTH); + result = (int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_WIDTH + cnt - 2); -#if __BYTE_ORDER == _BIG_ENDIAN - return (wctrans_t) result[1 + 2 * cnt]; -#else - return (wctrans_t) result[1 + 2 * cnt + 1]; -#endif + return (wctrans_t) (result + 128); } diff --git a/wctype/wctype.h b/wctype/wctype.h index 68f3853c94..378095bcb4 100644 --- a/wctype/wctype.h +++ b/wctype/wctype.h @@ -70,7 +70,10 @@ typedef unsigned long int wctype_t; # define _ISwbit(bit) (1 << (bit)) # else /* __BYTE_ORDER == __LITTLE_ENDIAN */ # define _ISwbit(bit) \ - ((bit) < 8 ? (int) (1UL << (bit) << 24) : (int) (1UL << ((bit) + 8))) + ((bit) < 8 ? (int) (1UL << ((bit) + 24)) \ + : ((bit) < 16 ? (int) (1UL << ((bit) + 8)) \ + : ((bit) < 24 ? (int) (1UL << ((bit) - 8 )) \ + : (int) (1UL << ((bit) - 24 ))))) # endif enum |