mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
Update.
* locale/programs/ld-ctype.c (ctype_finish): Take all characters from the input charset into account when generating the hash table. (allocate_arrays): Correct setting default width. Not all empty slots in the table are filled, only those not covert explicitly by the locale description and in the charset. * stdio-common/vfscanf.c: Make sure to always return WEOF and EOF for wide character version. For %C handling, test correct pointer variable for NULL. * wcsmbs/wctob.c: Handle WEOF special. * wcsmbs/wcwidth.h: 0xff in width array means invalid character. * wctype/wctype.h: Protect gcc-isms with __extension__. Avoid always-true test to avoid warning.
This commit is contained in:
parent
3769620607
commit
0e16ecfa1e
17
ChangeLog
17
ChangeLog
@ -1,8 +1,25 @@
|
||||
2000-06-27 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* locale/programs/ld-ctype.c (ctype_finish): Take all characters from
|
||||
the input charset into account when generating the hash table.
|
||||
(allocate_arrays): Correct setting default width. Not all empty slots
|
||||
in the table are filled, only those not covert explicitly by the
|
||||
locale description and in the charset.
|
||||
|
||||
* wctype/towctrans.c (__towctrans): Be graceful and accept error
|
||||
return values from the wctrans function.
|
||||
|
||||
* stdio-common/vfscanf.c: Make sure to always return WEOF and EOF for
|
||||
wide character version.
|
||||
For %C handling, test correct pointer variable for NULL.
|
||||
|
||||
* wcsmbs/wctob.c: Handle WEOF special.
|
||||
|
||||
* wcsmbs/wcwidth.h: 0xff in width array means invalid character.
|
||||
|
||||
* wctype/wctype.h: Protect gcc-isms with __extension__. Avoid
|
||||
always-true test to avoid warning.
|
||||
|
||||
2000-06-27 Greg McGary <greg@mcgary.org>
|
||||
|
||||
* elf/dl-open.c (_dl_sysdep_start): Wrap weak_extern decl in BP_SYM ().
|
||||
|
@ -345,6 +345,10 @@ ctype_finish (struct localedef_t *locale, struct charmap_t *charmap)
|
||||
struct charseq *space_seq;
|
||||
struct locale_ctype_t *ctype = locale->categories[LC_CTYPE].ctype;
|
||||
int warned;
|
||||
const void *key;
|
||||
size_t len;
|
||||
void *vdata;
|
||||
void *curs;
|
||||
|
||||
/* Now resolve copying and also handle completely missing definitions. */
|
||||
if (ctype == NULL)
|
||||
@ -637,6 +641,21 @@ character '%s' in class `%s' must not be in class `%s'"),
|
||||
}
|
||||
}
|
||||
|
||||
/* Now set all the other characters of the character set to the
|
||||
default width. */
|
||||
curs = NULL;
|
||||
while (iterate_table (&charmap->char_table, &curs, &key, &len, &vdata) == 0)
|
||||
{
|
||||
struct charseq *data = (struct charseq *) vdata;
|
||||
|
||||
if (data->ucs4 == UNINITIALIZED_CHAR_VALUE)
|
||||
data->ucs4 = repertoire_find_value (ctype->repertoire,
|
||||
data->name, len);
|
||||
|
||||
if (data->ucs4 != ILLEGAL_CHAR_VALUE)
|
||||
(void) find_idx (ctype, NULL, NULL, NULL, data->ucs4);
|
||||
}
|
||||
|
||||
/* There must be a multiple of 10 digits. */
|
||||
if (ctype->mbdigits_act % 10 != 0)
|
||||
{
|
||||
@ -3158,6 +3177,10 @@ allocate_arrays (struct locale_ctype_t *ctype, struct charmap_t *charmap,
|
||||
{
|
||||
size_t idx;
|
||||
size_t width_table_size;
|
||||
const void *key;
|
||||
size_t len;
|
||||
void *vdata;
|
||||
void *curs;
|
||||
|
||||
/* First we have to decide how we organize the arrays. It is easy
|
||||
for a one-byte character set. But multi-byte character set
|
||||
@ -3345,8 +3368,8 @@ Computing table size for character classes might take a while..."),
|
||||
width_table_size = (ctype->plane_size * ctype->plane_cnt + 3) & ~3ul;
|
||||
ctype->width = (unsigned char *) xmalloc (width_table_size);
|
||||
|
||||
/* Initialize with default width value. */
|
||||
memset (ctype->width, charmap->width_default, width_table_size);
|
||||
/* Initialize with -1. */
|
||||
memset (ctype->width, '\xff', width_table_size);
|
||||
if (charmap->width_rules != NULL)
|
||||
{
|
||||
size_t cnt;
|
||||
@ -3389,8 +3412,10 @@ Computing table size for character classes might take a while..."),
|
||||
size_t depth = 0;
|
||||
|
||||
while (ctype->names[nr + depth * ctype->plane_size] != wch)
|
||||
{
|
||||
++depth;
|
||||
assert (depth < ctype->plane_cnt);
|
||||
}
|
||||
|
||||
ctype->width[nr + depth * ctype->plane_size]
|
||||
= charmap->width_rules[cnt].width;
|
||||
@ -3421,6 +3446,37 @@ Computing table size for character classes might take a while..."),
|
||||
}
|
||||
}
|
||||
|
||||
/* Now set all the other characters of the character set to the
|
||||
default width. */
|
||||
curs = NULL;
|
||||
while (iterate_table (&charmap->char_table, &curs, &key, &len, &vdata) == 0)
|
||||
{
|
||||
struct charseq *data = (struct charseq *) vdata;
|
||||
size_t nr;
|
||||
size_t depth;
|
||||
|
||||
if (data->ucs4 == UNINITIALIZED_CHAR_VALUE)
|
||||
data->ucs4 = repertoire_find_value (ctype->repertoire,
|
||||
data->name, len);
|
||||
|
||||
if (data->ucs4 != ILLEGAL_CHAR_VALUE)
|
||||
{
|
||||
nr = data->ucs4 % ctype->plane_size;
|
||||
depth = 0;
|
||||
|
||||
while (ctype->names[nr + depth * ctype->plane_size] != data->ucs4)
|
||||
{
|
||||
++depth;
|
||||
assert (depth < ctype->plane_cnt);
|
||||
}
|
||||
|
||||
if (ctype->width[nr + depth * ctype->plane_size]
|
||||
== (unsigned char) '\xff')
|
||||
ctype->width[nr + depth * ctype->plane_size] =
|
||||
charmap->width_default;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set MB_CUR_MAX. */
|
||||
ctype->mb_cur_max = charmap->mb_cur_max;
|
||||
|
||||
|
@ -1,5 +1,47 @@
|
||||
2000-06-27 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* tests-mbwc/dat_iswcntrl.c: U0000 is not in class cntrl.
|
||||
* tests-mbwc/dat_iswctype.c: U0000 is not in class cntrl.
|
||||
U4E06 is not in EUC-JP.
|
||||
* tests-mbwc/dat_swscanf.c: Correct several bugs in the tests.
|
||||
* tests-mbwc/dat_towctrans.c: Likewise.
|
||||
* tests-mbwc/dat_wcscoll.c: Likewise.
|
||||
* tests-mbwc/dat_wcswidth.c: Likewise.
|
||||
* tests-mbwc/dat_wctob.c: Likewise.
|
||||
|
||||
* tests-mbwc/tst_towctrans.c: Remove hack which avoided crash in an
|
||||
versions.
|
||||
|
||||
* tests-mbwc/dat_iswprint.c: Disable one test until it is decided
|
||||
what is correct.
|
||||
* tests-mbwc/dat_wcsxfrm.c: Likewise.
|
||||
* tests-mbwc/dat_wcwidth.c: Likewise.
|
||||
|
||||
* tests-mbwc/tst_funcs.h: Pretty print.
|
||||
|
||||
* tests-mbwc/tst_scscanf.c: Use correct format to avoid warning.
|
||||
* tests-mbwc/tst_wcschr.c: Likewise.
|
||||
* tests-mbwc/tst_wcscpy.c: Likewise.
|
||||
* tests-mbwc/tst_wcscat.c: Likewise.
|
||||
* tests-mbwc/tst_wcsncpy.c: Likewise.
|
||||
* tests-mbwc/tst_wcspbrk.c: Likewise.
|
||||
* tests-mbwc/tst_wcsstr.c: Likewise.
|
||||
* tests-mbwc/tst_wctrans.c: Likewise.
|
||||
* tests-mbwc/tst_wctype.c: Likewise.
|
||||
|
||||
* tests-mbwc/tst_wcscoll.c: Print better error messages.
|
||||
|
||||
* Makefile (tests): Define as $(locale_test_suite) but only
|
||||
if not cross-compiling and shared libs are built.
|
||||
(locale_test_suite): New variable. Name all new tests from the
|
||||
locale test suite.
|
||||
Add rule to run new tests only when all data is available.
|
||||
* tst-ctype.sh: Add hack to generate en_US.ANSI_X3.4-1968 locale.
|
||||
|
||||
* tst-ctype-de_DE.in: U00A0 is not in class graph.
|
||||
|
||||
* charmaps/EUC-JP: Remove U005C and U007E entries from non-ASCII range.
|
||||
|
||||
* locales/i18n: Backspace isn't blank, tab is.
|
||||
|
||||
* tst-ctype.c (main): Add tests for control characters and space.
|
||||
|
@ -35,15 +35,6 @@ locales := $(filter-out $(addprefix locales/, CVS RCS SCCS %~), \
|
||||
repertoiremaps := $(filter-out $(addprefix repertoiremaps/, CVS RCS SCCS %~), \
|
||||
$(wildcard repertoiremaps/*))
|
||||
|
||||
# Disable the tests for now - first the locales have to be generated
|
||||
#tests := tst_iswalnum tst_iswprint tst_towctrans tst_wcsncmp tst_wctrans \
|
||||
# tst_iswalpha tst_iswpunct tst_wcschr tst_wcspbrk tst_wctype \
|
||||
# tst_iswcntrl tst_iswspace tst_wcscoll tst_wcsspn tst_iswdigit \
|
||||
# tst_iswupper tst_wcscpy tst_wcsstr tst_iswgraph tst_iswxdigit \
|
||||
# tst_wcscspn tst_wcswidth tst_iswlower tst_swscanf tst_wcslen \
|
||||
# tst_wctob tst_iswctype tst_towlower tst_wcscat tst_towupper \
|
||||
# tst_wcscmp tst_wcsncat tst_wcsncpy tst_wcsxfrm tst_wcwidth
|
||||
|
||||
|
||||
subdir-dirs = tests-mbwc
|
||||
vpath %.c tests-mbwc
|
||||
@ -69,8 +60,9 @@ fmon-tests = n01y12 n02n40 n10y31 n11y41 n12y11 n20n32 n30y20 n41n00 \
|
||||
y01y10 y02n22 y22n42 y30y21 y32n31 y40y00 y42n21
|
||||
|
||||
generated := $(test-input) $(test-output)
|
||||
generated-dirs := $(basename $(test-input)) en_US $(ld-test-names) tt_TT\
|
||||
de_DE.437 $(addprefix tstfmon_,$(fmon-tests))
|
||||
generated-dirs := $(basename $(test-input)) $(ld-test-names) tt_TT \
|
||||
de_DE.437 $(addprefix tstfmon_,$(fmon-tests)) \
|
||||
en_US.ANSI_X3.4-1968 ja_JP.EUC-JP
|
||||
|
||||
distribute := CHECKSUMS README SUPPORTED ChangeLog \
|
||||
$(charmaps) $(locales) $(repertoiremaps) \
|
||||
@ -82,6 +74,22 @@ distribute := CHECKSUMS README SUPPORTED ChangeLog \
|
||||
# Get $(inst_i18ndir) defined.
|
||||
include ../Makeconfig
|
||||
|
||||
ifeq (no,$(cross-compiling))
|
||||
ifeq (yes,$(build-shared))
|
||||
# Disable the tests for now - first the locales have to be generated
|
||||
locale_test_suite := tst_iswalnum tst_iswprint tst_towctrans tst_wcsncmp \
|
||||
tst_wctrans tst_iswalpha tst_iswpunct tst_wcschr \
|
||||
tst_wcspbrk tst_wctype tst_iswcntrl tst_iswspace \
|
||||
tst_wcscoll tst_wcsspn tst_iswdigit tst_iswupper \
|
||||
tst_wcscpy tst_wcsstr tst_iswgraph tst_iswxdigit \
|
||||
tst_wcscspn tst_wcswidth tst_iswlower tst_swscanf \
|
||||
tst_wcslen tst_wctob tst_iswctype tst_towlower \
|
||||
tst_wcscat tst_towupper tst_wcscmp tst_wcsncat \
|
||||
tst_wcsncpy tst_wcsxfrm tst_wcwidth
|
||||
tests = $(locale_test_suite)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Files to install.
|
||||
install-others := $(addprefix $(inst_i18ndir)/, $(charmaps) $(locales) \
|
||||
$(repertoiremaps))
|
||||
@ -101,6 +109,7 @@ CFLAGS-tst-mbswcs4.c = -Wno-format
|
||||
CFLAGS-tst-mbswcs5.c = -Wno-format
|
||||
CFLAGS-tst-trans.c = -Wno-format
|
||||
|
||||
|
||||
ifeq (no,$(cross-compiling))
|
||||
ifeq (yes,$(build-shared))
|
||||
.PHONY: do-collate-test do-tst-fmon do-tst-locale do-tst-rpmatch do-tst-trans \
|
||||
@ -123,6 +132,7 @@ do-tst-mbswcs: tst-mbswcs.sh $(objpfx)tst-mbswcs1 $(objpfx)tst-mbswcs2 \
|
||||
$(SHELL) -e $< $(common-objpfx)
|
||||
do-tst-ctype: tst-ctype.sh $(objpfx)tst-ctype do-collate-test
|
||||
$(SHELL) -e $< $(common-objpfx)
|
||||
$(addsuffix .out,$(addprefix $(objpfx),$(locale_test_suite))): %: do-tst-ctype
|
||||
endif
|
||||
endif
|
||||
|
||||
|
@ -242,7 +242,6 @@ CHARMAP
|
||||
<U2015> /xa1/xbd HORIZONTAL BAR
|
||||
<U2010> /xa1/xbe HYPHEN
|
||||
<UFF0F> /xa1/xbf FULLWIDTH SOLIDUS
|
||||
<U005C> /xa1/xc0 REVERSE SOLIDUS
|
||||
<U301C> /xa1/xc1 WAVE DASH
|
||||
<U2016> /xa1/xc2 DOUBLE VERTICAL LINE
|
||||
<UFF5C> /xa1/xc3 FULLWIDTH VERTICAL LINE
|
||||
@ -7102,7 +7101,6 @@ CHARMAP
|
||||
<U00AF> /x8f/xa2/xb4 MACRON
|
||||
<U02DB> /x8f/xa2/xb5 OGONEK
|
||||
<U02DA> /x8f/xa2/xb6 RING ABOVE
|
||||
<U007E> /x8f/xa2/xb7 TILDE
|
||||
<U0384> /x8f/xa2/xb8 GREEK TONOS
|
||||
<U0385> /x8f/xa2/xb9 GREEK DIALYTIKA TONOS
|
||||
<U00A1> /x8f/xa2/xc2 INVERTED EXCLAMATION MARK
|
||||
|
@ -46,7 +46,11 @@ TST_ISW_LOC (CNTRL, cntrl) = {
|
||||
{ TST_ISW_REC (enUS, cntrl)
|
||||
{
|
||||
{ { WEOF }, { 0,0,1,0 } },
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ { 0x0000 }, { 0,0,0,0 } },
|
||||
#else
|
||||
{ { 0x0000 }, { 0,0,1,0 } },
|
||||
#endif
|
||||
{ { 0x001F }, { 0,0,0,0 } },
|
||||
{ { 0x0020 }, { 0,0,1,0 } },
|
||||
{ { 0x0021 }, { 0,0,1,0 } },
|
||||
|
@ -210,7 +210,12 @@ TST_ISWCTYPE tst_iswctype_loc [] = {
|
||||
{ { 0x0009, "blank" }, { 0,0,0,0 } },
|
||||
{ { 0x000B, "blank" }, { 0,0,1,0 } },
|
||||
{ { 0x0020, "blank" }, { 0,0,0,0 } },
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ { 0x0000, "cntrl" }, { 0,0,0,0 } },
|
||||
#else
|
||||
/* XXX U0000 has no properties at all. */
|
||||
{ { 0x0000, "cntrl" }, { 0,0,1,0 } },
|
||||
#endif
|
||||
{ { 0x001F, "cntrl" }, { 0,0,0,0 } },
|
||||
{ { 0x0020, "cntrl" }, { 0,0,1,0 } },
|
||||
{ { 0x0021, "cntrl" }, { 0,0,1,0 } },
|
||||
@ -531,8 +536,13 @@ TST_ISWCTYPE tst_iswctype_loc [] = {
|
||||
{ { 0xFF66, "jkata" }, { 0,0,0,0 } }, /* HALF KATA WO */
|
||||
{ { 0xFF6F, "jkata" }, { 0,0,0,0 } }, /* HALF KATA tu */
|
||||
{ { 0x4E05, "jkanji" }, { 0,0,0,0 } }, /* CJK UNI.IDEO. */
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
/* <NO_WAIVER>: */
|
||||
{ { 0x4E06, "jkanji" }, { 0,0,1,1 } }, /* CJK UNI.IDEO.NON-J */
|
||||
#else
|
||||
/* XXX This character does not exist in EUC-JP. */
|
||||
{ { 0x4E06, "jkanji" }, { 0,0,1,0 } }, /* CJK UNI.IDEO.NON-J */
|
||||
#endif
|
||||
{ { 0x4E07, "jkanji" }, { 0,0,0,0 } }, /* CJK UNI.IDEO. */
|
||||
{ is_last: 1 }
|
||||
}
|
||||
|
@ -65,7 +65,9 @@ TST_ISW_LOC (PRINT, print) = {
|
||||
{ { 0x007E }, { 0,0,0,0 } },
|
||||
{ { 0x007F }, { 0,0,1,0 } },
|
||||
{ { 0x0080 }, { 0,0,1,0 } }, /* 20 */
|
||||
#ifdef NO_WAIVER
|
||||
{ { 0x3042 }, { 0,0,1,0 } }, /* <WAIVER> */
|
||||
#endif
|
||||
{ is_last: 1 } /* Last element. */
|
||||
}
|
||||
},
|
||||
@ -120,4 +122,3 @@ TST_ISW_LOC (PRINT, print) = {
|
||||
},
|
||||
{ TST_ISW_REC (end, print) }
|
||||
};
|
||||
|
||||
|
@ -33,7 +33,6 @@ TST_SWSCANF tst_swscanf_loc [] =
|
||||
},
|
||||
},
|
||||
/*------------------------ 02 -----------------------*/
|
||||
/* <NO_WAIVER> x 2 */
|
||||
{ { {
|
||||
0x00E4, 0x00C4, 0x0000 /* "äÄ" */
|
||||
},
|
||||
@ -60,8 +59,13 @@ TST_SWSCANF tst_swscanf_loc [] =
|
||||
},
|
||||
L"1%d:2%d:3%d:4%d:5%d:6%d:7%d:8%d:9%d", 0
|
||||
},
|
||||
{ 1,EINVAL,1,EOF,
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ 1,EINVAL,1,WEOF,
|
||||
0,0,0,0,"", { 0x0000 },
|
||||
#else
|
||||
{ 0,0,1,0,
|
||||
0,0,0,0,"", { 0x0000 },
|
||||
#endif
|
||||
},
|
||||
},
|
||||
/*---------------------------------------------------*/
|
||||
@ -136,7 +140,6 @@ TST_SWSCANF tst_swscanf_loc [] =
|
||||
},
|
||||
},
|
||||
/*------------------------ 03 -----------------------*/
|
||||
/* <NO_WAIVER> */
|
||||
{ { {
|
||||
0x0031, 0x003A,
|
||||
0x0030, 0x003A,
|
||||
@ -144,12 +147,16 @@ TST_SWSCANF tst_swscanf_loc [] =
|
||||
0x0061, 0x003A,
|
||||
0x0063, 0x0064, 0x0000, 0x0000,
|
||||
},
|
||||
L"%2$d:%1$u:%f:%c:%s", 0
|
||||
L"%2$d:%1$u:%3$f:%4$c:%5$s", 0
|
||||
},
|
||||
{ 1,0,1,5,
|
||||
0, 1, 3.9, 'a', "cd", { 0x0000 }
|
||||
},
|
||||
},
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
/* XXX This test does not make sense. The format string is
|
||||
L"\x1\x2\x25\x53" and it is supposed to match the words
|
||||
0x30A2, 0x30A4, 0x0001. */
|
||||
/*------------------------ 04 -----------------------*/
|
||||
/* <NO_WAIVER> x 2 */
|
||||
{ { {
|
||||
@ -161,6 +168,7 @@ TST_SWSCANF tst_swscanf_loc [] =
|
||||
0,0,0,0,"", { 0x0000 }
|
||||
},
|
||||
},
|
||||
#endif
|
||||
/*---------------------------------------------------*/
|
||||
{ is_last: 1} /* Last element. */
|
||||
}
|
||||
|
@ -38,7 +38,11 @@ TST_TOWCTRANS tst_towctrans_loc [] = {
|
||||
{
|
||||
{ Ttowctrans, TST_LOC_de },
|
||||
{
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ { 0x0010, "tojkata" }, { 1,EINVAL,1,0x0010 } },
|
||||
#else
|
||||
{ { 0x0010, "tojkata" }, { 1,0, 1,0x0010 } },
|
||||
#endif
|
||||
{ { 0x0080, "tolower" }, { 1,0, 1,0x0080 } },
|
||||
{ { 0x00EC, "toupper" }, { 1,0, 1,0x00CC } },
|
||||
{ { 0x00CC, "tolower" }, { 1,0, 1,0x00EC } },
|
||||
@ -48,7 +52,11 @@ TST_TOWCTRANS tst_towctrans_loc [] = {
|
||||
{
|
||||
{ Ttowctrans, TST_LOC_enUS },
|
||||
{
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ { 0x0010, "xxxxxxx" }, { 1,EINVAL,1,0x0010 } },
|
||||
#else
|
||||
{ { 0x0010, "xxxxxxx" }, { 1,0, 1,0x0010 } },
|
||||
#endif
|
||||
{ { 0x007F, "tolower" }, { 1,0, 1,0x007F } },
|
||||
{ { 0x0061, "toupper" }, { 1,0, 1,0x0041 } },
|
||||
{ { 0x0041, "tolower" }, { 1,0, 1,0x0061 } },
|
||||
|
@ -104,6 +104,7 @@ TST_WCSCOLL tst_wcscoll_loc [] = {
|
||||
{ 0x0041,0x0041,0x0043,0x0000 }, }, /* #4 */
|
||||
/*expect*/ { 0,0,0,0, -1, },
|
||||
},
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
/* <WAIVER> */ /* assume ascii */
|
||||
{ /*input.*/ { { 0x0041,0x0042,0x0043,0x0000 },
|
||||
{ 0x0041,0x0061,0x0043,0x0000 }, }, /* #5 */
|
||||
@ -114,6 +115,17 @@ TST_WCSCOLL tst_wcscoll_loc [] = {
|
||||
{ 0x0041,0x0042,0x0043,0x0000 }, }, /* #6 */
|
||||
/*expect*/ { 0,0,0,0, +1, },
|
||||
},
|
||||
#else
|
||||
/* XXX Correct order is lowercase before uppercase. */
|
||||
{ /*input.*/ { { 0x0041,0x0042,0x0043,0x0000 },
|
||||
{ 0x0041,0x0061,0x0043,0x0000 }, }, /* #5 */
|
||||
/*expect*/ { 0,0,0,0, +1, },
|
||||
},
|
||||
{ /*input.*/ { { 0x0041,0x0061,0x0043,0x0000 },
|
||||
{ 0x0041,0x0042,0x0043,0x0000 }, }, /* #6 */
|
||||
/*expect*/ { 0,0,0,0, -1, },
|
||||
},
|
||||
#endif
|
||||
{ /*input.*/ { { 0x0041,0x0042,0x0000 },
|
||||
{ 0x0041,0x0042,0x0049,0x0000 }, }, /* #7 */
|
||||
/*expect*/ { 0,0,0,0, -1, },
|
||||
@ -122,6 +134,7 @@ TST_WCSCOLL tst_wcscoll_loc [] = {
|
||||
{ 0x0041,0x0042,0x0000 }, }, /* #8 */
|
||||
/*expect*/ { 0,0,0,0, +1, },
|
||||
},
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ /*input.*/ { { 0x0041,0x0092,0x0049,0x0000 },
|
||||
{ 0x0041,0x008E,0x0049,0x0000 }, }, /* #9 */
|
||||
/*expect*/ { 1,0,0,0, +1, },
|
||||
@ -130,6 +143,17 @@ TST_WCSCOLL tst_wcscoll_loc [] = {
|
||||
{ 0x0041,0x0092,0x0049,0x0000 }, }, /* #10 */
|
||||
/*expect*/ { 0,0,0,0, -1, },
|
||||
},
|
||||
#else
|
||||
/* Do not assume position of character out of range. */
|
||||
{ /*input.*/ { { 0x0041,0x0092,0x0049,0x0000 },
|
||||
{ 0x0041,0x008E,0x0049,0x0000 }, }, /* #9 */
|
||||
/*expect*/ { 1,0,0,0, 0, },
|
||||
},
|
||||
{ /*input.*/ { { 0x0041,0x008E,0x0049,0x0000 },
|
||||
{ 0x0041,0x0092,0x0049,0x0000 }, }, /* #10 */
|
||||
/*expect*/ { 0,0,0,0, 0, },
|
||||
},
|
||||
#endif
|
||||
{ is_last: 1 }
|
||||
}
|
||||
},
|
||||
|
@ -64,10 +64,10 @@ TST_WCSWIDTH tst_wcswidth_loc [] = {
|
||||
{ /*input.*/ { { 0x00C1,0x00FF,0x0000 }, 2 }, /* 18 */
|
||||
/*expect*/ { 0,0,1,2 },
|
||||
},
|
||||
{ /*input.*/ { { 0x00C1,0x3042,0x0000 }, 2 }, /* 19 */ /* <WAIVER> */ /* returns 2 */
|
||||
{ /*input.*/ { { 0x00C1,0x3042,0x0000 }, 2 }, /* 19 */
|
||||
/*expect*/ { 0,0,1,-1 },
|
||||
},
|
||||
{ /*input.*/ { { 0x00C1,0x3044,0x0000 }, 2 }, /* 20 */ /* <WAIVER> */ /* returns 2 */
|
||||
{ /*input.*/ { { 0x00C1,0x3044,0x0000 }, 2 }, /* 20 */
|
||||
/*expect*/ { 0,0,1,-1 },
|
||||
},
|
||||
{ is_last: 1 }
|
||||
@ -85,12 +85,21 @@ TST_WCSWIDTH tst_wcswidth_loc [] = {
|
||||
{ /*input.*/ { { 0x0041,0x0042,0x00C3,0x0000 }, 2 }, /* 03 */
|
||||
/*expect*/ { 0,0,1,2 },
|
||||
},
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ /*input.*/ { { 0x0041,0x0042,0x00C3,0x0000 }, 3 }, /* 04 */
|
||||
/*expect*/ { 0,0,1,3 },
|
||||
},
|
||||
{ /*input.*/ { { 0x0041,0x0042,0x00C3,0x0000 }, 4 }, /* 05 */
|
||||
/*expect*/ { 0,0,1,3 },
|
||||
},
|
||||
#else
|
||||
{ /*input.*/ { { 0x0041,0x0042,0x00C3,0x0000 }, 3 }, /* 04 */
|
||||
/*expect*/ { 0,0,1,-1 },
|
||||
},
|
||||
{ /*input.*/ { { 0x0041,0x0042,0x0043,0x0000 }, 4 }, /* 05 */
|
||||
/*expect*/ { 0,0,1,3 },
|
||||
},
|
||||
#endif
|
||||
{ /*input.*/ { { 0x0000 }, 1 }, /* 06 */
|
||||
/*expect*/ { 0,0,1,0 },
|
||||
},
|
||||
@ -124,17 +133,24 @@ TST_WCSWIDTH tst_wcswidth_loc [] = {
|
||||
{ /*input.*/ { { 0x0041,0x00A0,0x0000 }, 2 }, /* 16 */
|
||||
/*expect*/ { 0,0,1,-1 },
|
||||
},
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ /*input.*/ { { 0x0041,0x00A1,0x0000 }, 2 }, /* 17 */
|
||||
/*expect*/ { 0,0,1,2 },
|
||||
},
|
||||
{ /*input.*/ { { 0x0041,0x00FF,0x0000 }, 2 }, /* 18 */
|
||||
/*expect*/ { 0,0,1,2 },
|
||||
},
|
||||
/* <WAIVER> */ /* returns 2 */
|
||||
#else
|
||||
{ /*input.*/ { { 0x0041,0x007E,0x0000 }, 2 }, /* 17 */
|
||||
/*expect*/ { 0,0,1,2 },
|
||||
},
|
||||
{ /*input.*/ { { 0x0041,0x0020,0x0000 }, 2 }, /* 18 */
|
||||
/*expect*/ { 0,0,1,2 },
|
||||
},
|
||||
#endif
|
||||
{ /*input.*/ { { 0x0041,0x3042,0x0000 }, 2 }, /* 19 */
|
||||
/*expect*/ { 0,0,1,-1 },
|
||||
},
|
||||
/* <WAIVER> */ /* returns 2 */
|
||||
{ /*input.*/ { { 0x0041,0x3044,0x0000 }, 2 }, /* 20 */
|
||||
/*expect*/ { 0,0,1,-1 },
|
||||
},
|
||||
@ -192,10 +208,17 @@ TST_WCSWIDTH tst_wcswidth_loc [] = {
|
||||
{ /*input.*/ { { 0x0041,0x00A0,0x0000 }, 2 }, /* 16 */
|
||||
/*expect*/ { 0,0,1,-1 },
|
||||
},
|
||||
#ifdef NO_WAIVER
|
||||
/* <NO_WAIVER> */ /* returns 3 */
|
||||
{ /*input.*/ { { 0x0041,0x00A1,0x0000 }, 2 }, /* 17 */
|
||||
/*expect*/ { 0,0,1,-1 },
|
||||
},
|
||||
#else
|
||||
/* XXX U00A1 is valid -> /x8f/xa2/xc4 in JIS X 0212 */
|
||||
{ /*input.*/ { { 0x0041,0x00A1,0x0000 }, 2 }, /* 17 */
|
||||
/*expect*/ { 0,0,1,3 },
|
||||
},
|
||||
#endif
|
||||
{ /*input.*/ { { 0x0041,0xFF71,0x0000 }, 2 }, /* 18 */
|
||||
/*expect*/ { 0,0,1,2 },
|
||||
},
|
||||
|
@ -55,12 +55,13 @@ TST_WCSXFRM tst_wcsxfrm_loc [] = {
|
||||
{ /*inp*/ { { 0x0000,0x0000 }, { 0x0000,0x0000 }, 7, 7 }, /* #04 */
|
||||
/*exp*/ { 1,0, 0,0, },
|
||||
},
|
||||
|
||||
#ifdef NO_WAIVER
|
||||
{ /* <WAIVER> x 2 */
|
||||
/*inp*/ { { 0x3061,0x0000 }, { 0xFF42,0x0000 }, 7, 7 }, /* #05 */
|
||||
/* <WAIVER> */
|
||||
/*exp*/ { 1,EINVAL, 1,(size_t)-1, },
|
||||
},
|
||||
#endif
|
||||
{ is_last: 1 }
|
||||
}
|
||||
},
|
||||
@ -82,10 +83,12 @@ TST_WCSXFRM tst_wcsxfrm_loc [] = {
|
||||
{ /*inp*/ { { 0xFF71,0x0000 }, { 0x30A2,0x0000 }, 7, 7 }, /* #05 */
|
||||
/*exp*/ { 1,0, 0,0, },
|
||||
},
|
||||
#ifdef NO_WAIVER
|
||||
/* <WAIVER> x 2 */
|
||||
{ /*inp*/ { { 0x008E,0x0000 }, { 0x008F,0x0000 }, 7, 7 }, /* #06 */
|
||||
/*exp*/ { 1,EINVAL, 1,(size_t)-1, },
|
||||
},
|
||||
#endif
|
||||
{ is_last: 1 }
|
||||
}
|
||||
},
|
||||
|
@ -25,8 +25,14 @@ TST_WCTOB tst_wctob_loc [] = {
|
||||
{ { WEOF }, { 0,0, 1, EOF } },
|
||||
{ { 0x0020 }, { 0,0, 1, 0x20 } },
|
||||
{ { 0x0061 }, { 0,0, 1, 0x61 } },
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ { 0x0080 }, { 0,0, 1, 0x80 } },
|
||||
{ { 0x00C4 }, { 0,0, 1, 0xC4 } },
|
||||
#else
|
||||
/* XXX These are no valid characters. */
|
||||
{ { 0x0080 }, { 0,0, 1, EOF } },
|
||||
{ { 0x00C4 }, { 0,0, 1, EOF } },
|
||||
#endif
|
||||
{ { 0x30C4 }, { 0,0, 1, EOF } },
|
||||
{ is_last: 1 } /* Last element. */
|
||||
}
|
||||
@ -36,7 +42,12 @@ TST_WCTOB tst_wctob_loc [] = {
|
||||
{ { WEOF }, { 0,0, 1, EOF } },
|
||||
{ { 0x0020 }, { 0,0, 1, 0x20 } },
|
||||
{ { 0x0061 }, { 0,0, 1, 0x61 } },
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
{ { 0x0080 }, { 0,0, 1, 0x80 } }, /* <WAIVER> */
|
||||
#else
|
||||
/* XXX These are no valid characters. */
|
||||
{ { 0x0080 }, { 0,0, 1, EOF } },
|
||||
#endif
|
||||
{ { 0x00C4 }, { 0,0, 1, EOF } },
|
||||
{ { 0x30C4 }, { 0,0, 1, EOF } },
|
||||
{ is_last: 1 } /* Last element. */
|
||||
|
@ -28,10 +28,16 @@ TST_WCWIDTH tst_wcwidth_loc [] = {
|
||||
{ /*inp*/ { 0x00C1 }, /* #06 */
|
||||
/*exp*/ { 0,0, 1,1, },
|
||||
},
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
/* <WAIVER> */ /* CHECK : wint_t */
|
||||
{ /*inp*/ { 0x3041 }, /* #07 */
|
||||
/*exp*/ { 0,0, 1,0, },
|
||||
},
|
||||
#else
|
||||
{ /*inp*/ { 0x3041 }, /* #07 */
|
||||
/*exp*/ { 0,0, 1,EOF, },
|
||||
},
|
||||
#endif
|
||||
{ is_last: 1 }
|
||||
}
|
||||
},
|
||||
@ -50,15 +56,12 @@ TST_WCWIDTH tst_wcwidth_loc [] = {
|
||||
{ /*inp*/ { 0x0080 }, /* #04 */
|
||||
/*exp*/ { 0,0, 1,-1, },
|
||||
},
|
||||
/* <WAIVER> */ /* assume ascii */
|
||||
{ /*inp*/ { 0x00A1 }, /* #05 */
|
||||
/*exp*/ { 0,0, 1,-1, },
|
||||
},
|
||||
/* <WAIVER> */ /* assume ascii */
|
||||
{ /*inp*/ { 0x00C1 }, /* #06 */
|
||||
/*exp*/ { 0,0, 1,-1, },
|
||||
},
|
||||
/* <WAIVER> */ /* CHECK : wint_t */
|
||||
{ /*inp*/ { 0x3041 }, /* #07 */
|
||||
/*exp*/ { 0,0, 1,-1, },
|
||||
},
|
||||
@ -80,10 +83,17 @@ TST_WCWIDTH tst_wcwidth_loc [] = {
|
||||
{ /*inp*/ { 0x0080 }, /* #04 */
|
||||
/*exp*/ { 0,0, 1,-1, },
|
||||
},
|
||||
#ifdef SHOJI_IS_RIGHT
|
||||
/* <NO_WAIVER> */
|
||||
{ /*inp*/ { 0x00A1 }, /* #05 */
|
||||
/*exp*/ { 0,0, 1,0, },
|
||||
},
|
||||
#else
|
||||
/* XXX U00A1 is a valid character in EUC-JP. */
|
||||
{ /*inp*/ { 0x00A1 }, /* #05 */
|
||||
/*exp*/ { 0,0, 1,2, },
|
||||
},
|
||||
#endif
|
||||
/* jisx0212 */
|
||||
{ /*inp*/ { 0x00C1 }, /* #06 */
|
||||
/*exp*/ { 0,0, 1,2, },
|
||||
|
@ -59,7 +59,7 @@ tst_swscanf (FILE * fp, int debug_flg)
|
||||
|
||||
if (TST_INPUT (swscanf).wch)
|
||||
{
|
||||
fprintf (stdout, " val_S[ 0 ] = 0x%x\n",
|
||||
fprintf (stdout, " val_S[ 0 ] = 0x%lx\n",
|
||||
val_S[0]);
|
||||
}
|
||||
else
|
||||
|
@ -14,7 +14,9 @@ tst_towctrans (FILE *fp, int debug_flg)
|
||||
TST_DECL_VARS (wint_t);
|
||||
wint_t wc;
|
||||
const char *ts;
|
||||
#if SHOJI_IS_RIGHT
|
||||
int dummy=0;
|
||||
#endif
|
||||
wctrans_t wto;
|
||||
|
||||
TST_DO_TEST (towctrans)
|
||||
@ -26,6 +28,7 @@ tst_towctrans (FILE *fp, int debug_flg)
|
||||
wc = TST_INPUT (towctrans).wc;
|
||||
ts = TST_INPUT (towctrans).ts;
|
||||
|
||||
#if SHOJI_IS_RIGHT
|
||||
if ((wto = wctrans (ts)) == (wctrans_t) 0)
|
||||
{
|
||||
#if 0
|
||||
@ -41,6 +44,9 @@ tst_towctrans (FILE *fp, int debug_flg)
|
||||
fprintf (stdout, "towctrans() ------ wctrans() returnd 0.\n");
|
||||
}
|
||||
}
|
||||
#else
|
||||
wto = wctrans (ts);
|
||||
#endif
|
||||
|
||||
TST_CLEAR_ERRNO;
|
||||
ret = towctrans (wc, wto);
|
||||
|
@ -27,7 +27,7 @@ tst_wcschr (FILE * fp, int debug_flg)
|
||||
{
|
||||
if (ret)
|
||||
{
|
||||
fprintf (stderr, "wcschr: ret = 0x%x\n", *ret);
|
||||
fprintf (stderr, "wcschr: ret = 0x%lx\n", *ret);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -44,9 +44,28 @@ tst_wcscoll (FILE * fp, int debug_flg)
|
||||
else
|
||||
{
|
||||
err_count++;
|
||||
if (cmp == 1)
|
||||
{
|
||||
if (ret == 0)
|
||||
Result (C_FAILURE, S_WCSCOLL, CASE_3,
|
||||
"the return value should be positive"
|
||||
"/negative but it's negative/positive.");
|
||||
" but it's zero.");
|
||||
else
|
||||
Result (C_FAILURE, S_WCSCOLL, CASE_3,
|
||||
"the return value should be positive"
|
||||
" but it's negative.");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ret == 0)
|
||||
Result (C_FAILURE, S_WCSCOLL, CASE_3,
|
||||
"the return value should be negative"
|
||||
" but it's zero.");
|
||||
else
|
||||
Result (C_FAILURE, S_WCSCOLL, CASE_3,
|
||||
"the return value should be negative"
|
||||
" but it's positive.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ tst_wcscpy (FILE * fp, int debug_flg)
|
||||
if (debug_flg)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ws1[ %d ] = 0x%x <-> wx_ex[ %d ] = 0x%x\n", i,
|
||||
"ws1[ %d ] = 0x%lx <-> wx_ex[ %d ] = 0x%lx\n", i,
|
||||
ws1[i], i, ws_ex[i]);
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@ tst_wcsncat (FILE * fp, int debug_flg)
|
||||
{
|
||||
if (debug_flg)
|
||||
{
|
||||
fprintf (stderr, "ws1[%d] = 0x%x\n", i, ws1[i]);
|
||||
fprintf (stderr, "ws1[%d] = 0x%lx\n", i, ws1[i]);
|
||||
}
|
||||
|
||||
if (ws1[i] != ws_ex[i])
|
||||
|
@ -63,7 +63,7 @@ tst_wcsncpy (FILE *fp, int debug_flg)
|
||||
{
|
||||
if (debug_flg)
|
||||
fprintf (stderr,
|
||||
"wcsncpy: ws1[ %d ] = 0x%x <-> wx_ex[ %d ] = 0x%x\n",
|
||||
"wcsncpy: ws1[ %d ] = 0x%lx <-> wx_ex[ %d ] = 0x%lx\n",
|
||||
i, ws1[i], i, ws_ex[i]);
|
||||
|
||||
if (ws1[i] != ws_ex[i])
|
||||
|
@ -32,7 +32,7 @@ tst_wcspbrk (FILE * fp, int debug_flg)
|
||||
rec + 1, (ret == NULL) ? "null" : "not null");
|
||||
if (ret)
|
||||
fprintf (stderr,
|
||||
" ret[0] = 0x%x : 0x%x = ws2[0]\n",
|
||||
" ret[0] = 0x%lx : 0x%lx = ws2[0]\n",
|
||||
ret[0], ws2[0]);
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ tst_wcspbrk (FILE * fp, int debug_flg)
|
||||
|
||||
if (debug_flg)
|
||||
fprintf (stdout,
|
||||
" *ret = 0x%x <-> 0x%x = wc_ex\n",
|
||||
" *ret = 0x%lx <-> 0x%lx = wc_ex\n",
|
||||
*ret, wc_ex);
|
||||
|
||||
if (*ret != wc_ex)
|
||||
|
@ -31,7 +31,7 @@ tst_wcsstr (FILE * fp, int debug_flg)
|
||||
if (ret)
|
||||
{
|
||||
fprintf (stderr,
|
||||
" ret[ 0 ] = 0x%x <-> 0x%x = ws2[ 0 ]\n",
|
||||
" ret[ 0 ] = 0x%lx <-> 0x%lx = ws2[ 0 ]\n",
|
||||
ret[0], ws2[0]);
|
||||
}
|
||||
}
|
||||
@ -59,8 +59,8 @@ tst_wcsstr (FILE * fp, int debug_flg)
|
||||
if (debug_flg)
|
||||
{
|
||||
fprintf (stderr,
|
||||
" : ret[ %d ] = 0x%x <-> 0x%x = ws2[ %d ]\n", i,
|
||||
ret[i], ws2[i], i);
|
||||
" : ret[ %d ] = 0x%lx <-> 0x%lx = ws2[ %d ]\n",
|
||||
i, ret[i], ws2[i], i);
|
||||
}
|
||||
|
||||
if (ret[i] != ws2[i])
|
||||
|
@ -27,7 +27,8 @@ tst_wctrans (FILE * fp, int debug_flg)
|
||||
|
||||
if (debug_flg)
|
||||
{
|
||||
fprintf (stderr, "tst_wctrans : [ %d ] ret = %d\n", rec + 1, ret);
|
||||
fprintf (stderr, "tst_wctrans : [ %d ] ret = %ld\n", rec + 1,
|
||||
(long int) ret);
|
||||
fprintf (stderr, " errno = %d\n", errno_save);
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ tst_wctype (FILE * fp, int debug_flg)
|
||||
|
||||
if (debug_flg)
|
||||
{
|
||||
fprintf (stderr, "tst_wctype : [ %d ] ret = %d\n", rec + 1, ret);
|
||||
fprintf (stderr, "tst_wctype : [ %d ] ret = %ld\n", rec + 1, ret);
|
||||
}
|
||||
|
||||
TST_IF_RETURN (S_WCTYPE)
|
||||
|
@ -27,7 +27,7 @@ print
|
||||
print 倳眑婭笫崷窙嗲睧颬睼麧緗鴇膹擨闀貘覷鏷禴矙𡜍𦶠<F0A19C8D>
|
||||
111111111111111111111111111111111111111111111111
|
||||
graph 嵗╯丰戍貝物洎悖停眾斯須號獄播噶擱藏霰匸<E99CB0>帊昅恘
|
||||
111111111111111111111111111111111111111111111111
|
||||
011111111111111111111111111111111111111111111111
|
||||
graph 倳眑婭笫崷窙嗲睧颬睼麧緗鴇膹擨闀貘覷鏷禴矙𡜍𦶠<F0A19C8D>
|
||||
111111111111111111111111111111111111111111111111
|
||||
blank 嵗╯丰戍貝物洎悖停眾斯須號獄播噶擱藏霰匸<E99CB0>帊昅恘
|
||||
|
@ -38,6 +38,9 @@ generate_locale ()
|
||||
}
|
||||
|
||||
generate_locale EUC-JP ja_JP ja_JP.EUC-JP
|
||||
# XXX This is a hack for now. We need the en_US.ANSI_X3.4-1968 locale
|
||||
# XXX elsewhere
|
||||
generate_locale ANSI_X3.4-1968 en_US en_US.ANSI_X3.4-1968
|
||||
|
||||
status=0
|
||||
|
||||
|
@ -86,7 +86,7 @@
|
||||
# define ISXDIGIT(Ch) iswxdigit (Ch)
|
||||
# define TOLOWER(Ch) towlower (Ch)
|
||||
# define ORIENT if (s->_vtable_offset == 0 && _IO_fwide (s, 1) != 1)\
|
||||
return EOF
|
||||
return WEOF
|
||||
# define __strtoll_internal __wcstoll_internal
|
||||
# define __strtoull_internal __wcstoull_internal
|
||||
# define __strtol_internal __wcstol_internal
|
||||
@ -99,6 +99,8 @@
|
||||
# define CHAR_T wchar_t
|
||||
# define UCHAR_T unsigned int
|
||||
# define WINT_T wint_t
|
||||
# undef EOF
|
||||
# define EOF WEOF
|
||||
# else
|
||||
# define ungetc(c, s) ((void) ((int) c == EOF \
|
||||
|| (--read_in, \
|
||||
@ -715,7 +717,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||
if (!(flags & SUPPRESS))
|
||||
{
|
||||
wstr = ARG (wchar_t *);
|
||||
if (str == NULL)
|
||||
if (wstr == NULL)
|
||||
conv_error ();
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,9 @@ wctob (c)
|
||||
size_t dummy;
|
||||
int status;
|
||||
|
||||
if (c == WEOF)
|
||||
return EOF;
|
||||
|
||||
/* Tell where we want the result. */
|
||||
data.__outbuf = buf;
|
||||
data.__outbufend = buf + MB_LEN_MAX;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Internal header containing implementation of wcwidth() function.
|
||||
Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
|
||||
|
||||
@ -33,6 +33,7 @@ static __inline int
|
||||
internal_wcwidth (wint_t ch)
|
||||
{
|
||||
size_t idx;
|
||||
unsigned char res;
|
||||
|
||||
if (ch == L'\0')
|
||||
return 0;
|
||||
@ -41,5 +42,6 @@ internal_wcwidth (wint_t ch)
|
||||
if (idx == ~((size_t) 0) || (__ctype32_b[idx] & _ISwprint) == 0)
|
||||
return -1;
|
||||
|
||||
return (int) __ctype_width[idx];
|
||||
res = __ctype_width[idx];
|
||||
return res == (unsigned char) '\xff' ? -1 : (int) res;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -176,48 +176,61 @@ extern int iswctype (wint_t __wc, wctype_t __desc) __THROW;
|
||||
extern unsigned int *__ctype32_b;
|
||||
|
||||
# define iswalnum(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwalnum) : iswalnum (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwalnum) : iswalnum (wc)))
|
||||
# define iswalpha(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwalpha) : iswalpha (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwalpha) : iswalpha (wc)))
|
||||
# define iswcntrl(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwcntrl) : iswcntrl (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwcntrl) : iswcntrl (wc)))
|
||||
# define iswdigit(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwdigit) : iswdigit (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwdigit) : iswdigit (wc)))
|
||||
# define iswlower(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwlower) : iswlower (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwlower) : iswlower (wc)))
|
||||
# define iswgraph(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwgraph) : iswgraph (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwgraph) : iswgraph (wc)))
|
||||
# define iswprint(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwprint) : iswprint (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwprint) : iswprint (wc)))
|
||||
# define iswpunct(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwpunct) : iswpunct (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwpunct) : iswpunct (wc)))
|
||||
# define iswspace(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwspace) : iswspace (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwspace) : iswspace (wc)))
|
||||
# define iswupper(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwupper) : iswupper (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwupper) : iswupper (wc)))
|
||||
# define iswxdigit(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwxdigit) : iswxdigit (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwxdigit) : iswxdigit (wc)))
|
||||
|
||||
# ifdef __USE_GNU
|
||||
# define iswblank(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & _ISwblank) : iswblank (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & _ISwblank) : iswblank (wc)))
|
||||
# endif
|
||||
|
||||
# define iswctype(wc, desc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[wc] & desc) : iswctype (wc, desc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (int) (__ctype32_b[(wint_t) (wc)] & desc) : iswctype (wc, desc)))
|
||||
|
||||
#endif /* gcc && optimizing */
|
||||
|
||||
@ -245,12 +258,14 @@ extern const wint_t *__ctype32_tolower;
|
||||
extern const wint_t *__ctype32_toupper;
|
||||
|
||||
# define towlower(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (wint_t) __ctype32_tolower[wc] : towlower (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (wint_t) __ctype32_tolower[(wint_t) (wc)] : towlower (wc)))
|
||||
|
||||
# define towupper(wc) \
|
||||
(__builtin_constant_p (wc) && (wc) >= L'\0' && (wc) <= L'\xff' \
|
||||
? (wint_t) __ctype32_toupper[wc] : towupper (wc))
|
||||
(__extension__ \
|
||||
(__builtin_constant_p (wc) && (wint_t) (wc) <= L'\xff' \
|
||||
? (wint_t) __ctype32_toupper[(wint_t) (wc)] : towupper (wc)))
|
||||
|
||||
#endif /* gcc && optimizing */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user