From 5491da0dfa50a969aca174742c64e114fe068af4 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 18 Nov 1999 07:22:53 +0000 Subject: Update. * locale/programs/ld-ctype.c (ctype_output): Correct computation of nelems. Correctly compute index for additional character classes. (ctype_read): Handle charclass and charconv definitions. Also recognize arbitrary strings as mapping names. * locale/programs/ld-time.c (time_finish): Correctly skip over wide character era strings. * locale/lc-time.c (_nl_get_era_entry): Correctly skip era name and format for wide characters. * time/strftime.c: Correctly determine era information for wide wcsftime. * wctrans.c: Fix after removal of second endianess table. * wctype/wctype.h (_ISwbit): Correctly handle bits > 16. Patches by Shinya Hanataka . * wcsmbs/wcwidth.h (internal_wcwidth): Reject non-printable characters. --- wctype/wctrans.c | 13 +++++-------- wctype/wctype.h | 5 ++++- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'wctype') 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 , 1996. @@ -18,6 +18,7 @@ Boston, MA 02111-1307, USA. */ #include +#include #include #include #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 -- cgit v1.2.3