diff options
Diffstat (limited to 'tests')
909 files changed, 19018 insertions, 2781 deletions
diff --git a/tests/Makefile.gnulib b/tests/Makefile.gnulib index 4b3f0ea2..5e989140 100644 --- a/tests/Makefile.gnulib +++ b/tests/Makefile.gnulib @@ -1,6 +1,6 @@ ## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002-2022 Free Software Foundation, Inc. +# Copyright (C) 2002-2024 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -81,6 +81,14 @@ EXTRA_DIST += test-accept.c signature.h macros.h ## end gnulib module accept-tests +## begin gnulib module alignasof-tests + +TESTS += test-alignasof +check_PROGRAMS += test-alignasof +EXTRA_DIST += test-alignasof.c macros.h + +## end gnulib module alignasof-tests + ## begin gnulib module alloca @@ -202,6 +210,22 @@ EXTRA_DIST += test-bind.c signature.h macros.h ## end gnulib module bind-tests +## begin gnulib module btoc32 + +libtests_a_SOURCES += btoc32.c + +## end gnulib module btoc32 + +## begin gnulib module btoc32-tests + +TESTS += test-btoc32-1.sh test-btoc32-2.sh test-btoc32-3.sh +TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-btoc32 +test_btoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) +EXTRA_DIST += test-btoc32-1.sh test-btoc32-2.sh test-btoc32-3.sh test-btoc32.c signature.h macros.h + +## end gnulib module btoc32-tests + ## begin gnulib module btowc if GL_COND_OBJ_BTOWC @@ -212,11 +236,11 @@ endif ## begin gnulib module btowc-tests -TESTS += test-btowc1.sh test-btowc2.sh +TESTS += test-btowc-1.sh test-btowc-2.sh test-btowc-3.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-btowc -test_btowc_LDADD = $(LDADD) $(LIB_SETLOCALE) -EXTRA_DIST += test-btowc1.sh test-btowc2.sh test-btowc.c signature.h macros.h +test_btowc_LDADD = $(LDADD) $(SETLOCALE_LIB) +EXTRA_DIST += test-btowc-1.sh test-btowc-2.sh test-btowc-3.sh test-btowc.c signature.h macros.h ## end gnulib module btowc-tests @@ -224,7 +248,7 @@ EXTRA_DIST += test-btowc1.sh test-btowc2.sh test-btowc.c signature.h macros.h TESTS += test-c-ctype check_PROGRAMS += test-c-ctype -test_c_ctype_LDADD = $(LDADD) $(LIB_SETLOCALE) +test_c_ctype_LDADD = $(LDADD) $(SETLOCALE_LIB) EXTRA_DIST += test-c-ctype.c macros.h ## end gnulib module c-ctype-tests @@ -234,12 +258,235 @@ EXTRA_DIST += test-c-ctype.c macros.h TESTS += test-c-strcase.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' check_PROGRAMS += test-c-strcasecmp test-c-strncasecmp -test_c_strcasecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_c_strncasecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) +test_c_strcasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c_strncasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) EXTRA_DIST += test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c macros.h ## end gnulib module c-strcase-tests +## begin gnulib module c32isalnum-tests + +TESTS += test-c32isalnum.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isalnum +test_c32isalnum_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isalnum.sh test-c32isalnum.c signature.h macros.h + +## end gnulib module c32isalnum-tests + +## begin gnulib module c32isalpha-tests + +TESTS += test-c32isalpha.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isalpha +test_c32isalpha_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isalpha.sh test-c32isalpha.c signature.h macros.h + +## end gnulib module c32isalpha-tests + +## begin gnulib module c32isblank-tests + +TESTS += test-c32isblank.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isblank +test_c32isblank_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isblank.sh test-c32isblank.c signature.h macros.h + +## end gnulib module c32isblank-tests + +## begin gnulib module c32iscntrl-tests + +TESTS += test-c32iscntrl.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32iscntrl +test_c32iscntrl_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32iscntrl.sh test-c32iscntrl.c signature.h macros.h + +## end gnulib module c32iscntrl-tests + +## begin gnulib module c32isdigit-tests + +TESTS += test-c32isdigit.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isdigit +test_c32isdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isdigit.sh test-c32isdigit.c signature.h macros.h + +## end gnulib module c32isdigit-tests + +## begin gnulib module c32isgraph-tests + +TESTS += test-c32isgraph.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isgraph +test_c32isgraph_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isgraph.sh test-c32isgraph.c signature.h macros.h + +## end gnulib module c32isgraph-tests + +## begin gnulib module c32islower-tests + +TESTS += test-c32islower.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32islower +test_c32islower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32islower.sh test-c32islower.c signature.h macros.h + +## end gnulib module c32islower-tests + +## begin gnulib module c32isprint-tests + +TESTS += test-c32isprint.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isprint +test_c32isprint_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isprint.sh test-c32isprint.c signature.h macros.h + +## end gnulib module c32isprint-tests + +## begin gnulib module c32ispunct-tests + +TESTS += test-c32ispunct.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32ispunct +test_c32ispunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32ispunct.sh test-c32ispunct.c signature.h macros.h + +## end gnulib module c32ispunct-tests + +## begin gnulib module c32isspace-tests + +TESTS += test-c32isspace.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isspace +test_c32isspace_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isspace.sh test-c32isspace.c signature.h macros.h + +## end gnulib module c32isspace-tests + +## begin gnulib module c32isupper-tests + +TESTS += test-c32isupper.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isupper +test_c32isupper_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isupper.sh test-c32isupper.c signature.h macros.h + +## end gnulib module c32isupper-tests + +## begin gnulib module c32isxdigit-tests + +TESTS += test-c32isxdigit.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isxdigit +test_c32isxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isxdigit.sh test-c32isxdigit.c signature.h macros.h + +## end gnulib module c32isxdigit-tests + +## begin gnulib module c32rtomb + +if GL_COND_OBJ_C32RTOMB +libtests_a_SOURCES += c32rtomb.c +endif + +## end gnulib module c32rtomb + +## begin gnulib module c32rtomb-tests + +TESTS += \ + test-c32rtomb.sh \ + test-c32rtomb-w32-2.sh test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh \ + test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh test-c32rtomb-w32-7.sh \ + test-c32rtomb-w32-8.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32rtomb test-c32rtomb-w32 +test_c32rtomb_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) +EXTRA_DIST += test-c32rtomb.sh test-c32rtomb.c test-c32rtomb-w32-2.sh test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh test-c32rtomb-w32-7.sh test-c32rtomb-w32-8.sh test-c32rtomb-w32.c signature.h macros.h + +## end gnulib module c32rtomb-tests + +## begin gnulib module c32tob + +libtests_a_SOURCES += c32tob.c + +## end gnulib module c32tob + +## begin gnulib module c32tolower-tests + +TESTS += test-c32tolower.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32tolower +test_c32tolower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32tolower.sh test-c32tolower.c signature.h macros.h + +## end gnulib module c32tolower-tests + +## begin gnulib module c32width-tests + +TESTS += test-c32width +check_PROGRAMS += test-c32width +test_c32width_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32width.c signature.h macros.h + +## end gnulib module c32width-tests + ## begin gnulib module calloc-gnu @@ -390,10 +637,41 @@ if GL_COND_OBJ_ERROR libtests_a_SOURCES += error.c endif -EXTRA_DIST += error.h - ## end gnulib module error +## begin gnulib module error-h + +BUILT_SOURCES += error.h + +# We need the following in order to override <error.h>. +error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H) + $(gl_V_at)$(SED_HEADER_STDOUT) \ + -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \ + -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \ + -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \ + -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \ + -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + $(srcdir)/error.in.h > $@-t + $(AM_V_at)mv $@-t $@ +MOSTLYCLEANFILES += error.h error.h-t + +EXTRA_DIST += error.in.h + +## end gnulib module error-h + +## begin gnulib module error-tests + +TESTS += test-error.sh +check_PROGRAMS += test-error +test_error_LDADD = $(LDADD) $(LIBINTL) +EXTRA_DIST += test-error.sh test-error.c macros.h + +## end gnulib module error-tests + ## begin gnulib module exitfail libtests_a_SOURCES += exitfail.c @@ -539,7 +817,7 @@ EXTRA_DIST += test-free.c macros.h TESTS += test-frexp-nolibm check_PROGRAMS += test-frexp-nolibm test_frexp_nolibm_SOURCES = test-frexp.c randomd.c -EXTRA_DIST += test-frexp.c test-frexp.h minus-zero.h infinity.h nan.h signature.h macros.h randomd.c +EXTRA_DIST += test-frexp.c test-frexp.h minus-zero.h infinity.h signature.h macros.h randomd.c ## end gnulib module frexp-nolibm-tests @@ -548,7 +826,7 @@ EXTRA_DIST += test-frexp.c test-frexp.h minus-zero.h infinity.h nan.h signature. TESTS += test-frexpl-nolibm check_PROGRAMS += test-frexpl-nolibm test_frexpl_nolibm_SOURCES = test-frexpl.c randoml.c -EXTRA_DIST += test-frexpl.c test-frexp.h minus-zero.h infinity.h nan.h signature.h macros.h randoml.c +EXTRA_DIST += test-frexpl.c test-frexp.h minus-zero.h infinity.h signature.h macros.h randoml.c ## end gnulib module frexpl-nolibm-tests @@ -667,7 +945,11 @@ endif ## begin gnulib module getprogname -libtests_a_SOURCES += getprogname.h getprogname.c +if GL_COND_OBJ_GETPROGNAME +libtests_a_SOURCES += getprogname.c +endif + +EXTRA_DIST += getprogname.h ## end gnulib module getprogname @@ -700,7 +982,7 @@ endif TESTS += test-gettimeofday check_PROGRAMS += test-gettimeofday -EXTRA_DIST += signature.h test-gettimeofday.c +EXTRA_DIST += test-gettimeofday.c signature.h macros.h ## end gnulib module gettimeofday-tests @@ -717,7 +999,7 @@ V_GPERF_0 = @echo " GPERF " $@; TESTS += test-hard-locale check_PROGRAMS += test-hard-locale -test_hard_locale_LDADD = $(LDADD) $(LIB_SETLOCALE) @LIB_HARD_LOCALE@ +test_hard_locale_LDADD = $(LDADD) $(SETLOCALE_LIB) @HARD_LOCALE_LIB@ # We cannot call this program 'locale', because the C++ compiler on Mac OS X # would then barf upon '#include <locale>'. So, call it 'current-locale'. noinst_PROGRAMS += current-locale @@ -846,7 +1128,7 @@ EXTRA_DIST += test-isblank.c signature.h macros.h TESTS += test-isnand-nolibm check_PROGRAMS += test-isnand-nolibm -EXTRA_DIST += test-isnand-nolibm.c test-isnand.h minus-zero.h infinity.h nan.h macros.h +EXTRA_DIST += test-isnand-nolibm.c test-isnand.h minus-zero.h infinity.h macros.h ## end gnulib module isnand-nolibm-tests @@ -855,7 +1137,7 @@ EXTRA_DIST += test-isnand-nolibm.c test-isnand.h minus-zero.h infinity.h nan.h m TESTS += test-isnanf-nolibm check_PROGRAMS += test-isnanf-nolibm -EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h minus-zero.h infinity.h nan.h macros.h +EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h minus-zero.h infinity.h macros.h ## end gnulib module isnanf-nolibm-tests @@ -864,7 +1146,7 @@ EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h minus-zero.h infinity.h nan.h m TESTS += test-isnanl-nolibm check_PROGRAMS += test-isnanl-nolibm -EXTRA_DIST += test-isnanl-nolibm.c test-isnanl.h minus-zero.h infinity.h nan.h macros.h +EXTRA_DIST += test-isnanl-nolibm.c test-isnanl.h minus-zero.h infinity.h macros.h ## end gnulib module isnanl-nolibm-tests @@ -885,11 +1167,20 @@ TESTS_ENVIRONMENT += \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-iswdigit -test_iswdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) +test_iswdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) EXTRA_DIST += test-iswdigit.sh test-iswdigit.c signature.h macros.h ## end gnulib module iswdigit-tests +## begin gnulib module iswpunct-tests + +TESTS += test-iswpunct.sh +check_PROGRAMS += test-iswpunct +test_iswpunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +EXTRA_DIST += test-iswpunct.sh test-iswpunct.c signature.h macros.h + +## end gnulib module iswpunct-tests + ## begin gnulib module iswxdigit-tests TESTS += test-iswxdigit.sh @@ -899,7 +1190,7 @@ TESTS_ENVIRONMENT += \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-iswxdigit -test_iswxdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) +test_iswxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) EXTRA_DIST += test-iswxdigit.sh test-iswxdigit.c signature.h macros.h ## end gnulib module iswxdigit-tests @@ -912,6 +1203,21 @@ EXTRA_DIST += test-langinfo.c ## end gnulib module langinfo-tests +## begin gnulib module largefile-tests + +TESTS += test-largefile +check_PROGRAMS += test-largefile +EXTRA_DIST += test-largefile.c + +## end gnulib module largefile-tests + +## begin gnulib module libc-config + + +EXTRA_DIST += cdefs.h libc-config.h + +## end gnulib module libc-config + ## begin gnulib module limits-h-tests TESTS += test-limits-h @@ -942,7 +1248,7 @@ EXTRA_DIST += test-listen.c signature.h macros.h ## begin gnulib module localcharset-tests noinst_PROGRAMS += test-localcharset -test_localcharset_LDADD = $(LDADD) $(LIB_SETLOCALE) +test_localcharset_LDADD = $(LDADD) $(SETLOCALE_LIB) EXTRA_DIST += test-localcharset.c ## end gnulib module localcharset-tests @@ -959,7 +1265,7 @@ EXTRA_DIST += test-locale.c TESTS += test-localename check_PROGRAMS += test-localename -test_localename_LDADD = $(LDADD) $(LIB_SETLOCALE) @INTL_MACOSX_LIBS@ $(LIBTHREAD) +test_localename_LDADD = $(LDADD) $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD) EXTRA_DIST += test-localename.c macros.h @@ -975,7 +1281,7 @@ test_once1_SOURCES = test-once.c test_once1_LDADD = $(LDADD) @LIBTHREAD@ test_once2_SOURCES = test-once.c test_once2_LDADD = $(LDADD) @LIBMULTITHREAD@ -EXTRA_DIST += test-rwlock1.c test-lock.c test-once.c atomic-int-gnulib.h +EXTRA_DIST += test-rwlock1.c test-lock.c test-once.c atomic-int-gnulib.h macros.h ## end gnulib module lock-tests @@ -1029,22 +1335,41 @@ EXTRA_DIST += test-math.c macros.h ## end gnulib module math-tests +## begin gnulib module mbrtoc32-tests + +TESTS += \ + test-mbrtoc32-1.sh test-mbrtoc32-2.sh test-mbrtoc32-3.sh test-mbrtoc32-4.sh \ + test-mbrtoc32-5.sh \ + test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh test-mbrtoc32-w32-4.sh \ + test-mbrtoc32-w32-5.sh test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh \ + test-mbrtoc32-w32-8.sh +TESTS_ENVIRONMENT += \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-mbrtoc32 test-mbrtoc32-w32 +test_mbrtoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) +EXTRA_DIST += test-mbrtoc32-1.sh test-mbrtoc32-2.sh test-mbrtoc32-3.sh test-mbrtoc32-4.sh test-mbrtoc32-5.sh test-mbrtoc32.c test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh test-mbrtoc32-w32-4.sh test-mbrtoc32-w32-5.sh test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh test-mbrtoc32-w32-8.sh test-mbrtoc32-w32.c signature.h macros.h + +## end gnulib module mbrtoc32-tests + ## begin gnulib module mbrtowc-tests TESTS += \ - test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh \ - test-mbrtowc5.sh \ - test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \ - test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh \ - test-mbrtowc-w32-7.sh + test-mbrtowc-1.sh test-mbrtowc-2.sh test-mbrtowc-3.sh test-mbrtowc-4.sh \ + test-mbrtowc-5.sh \ + test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh \ + test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh \ + test-mbrtowc-w32-8.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbrtowc test-mbrtowc-w32 -test_mbrtowc_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) -EXTRA_DIST += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc5.sh test-mbrtowc.c test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh test-mbrtowc-w32.c signature.h macros.h +test_mbrtowc_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +EXTRA_DIST += test-mbrtowc-1.sh test-mbrtowc-2.sh test-mbrtowc-3.sh test-mbrtowc-4.sh test-mbrtowc-5.sh test-mbrtowc.c test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh test-mbrtowc-w32-8.sh test-mbrtowc-w32.c signature.h macros.h ## end gnulib module mbrtowc-tests @@ -1053,7 +1378,7 @@ EXTRA_DIST += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.s TESTS += test-mbsinit.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbsinit -test_mbsinit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) +test_mbsinit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) EXTRA_DIST += test-mbsinit.sh test-mbsinit.c signature.h macros.h ## end gnulib module mbsinit-tests @@ -1096,6 +1421,12 @@ EXTRA_DIST += msvc-nothrow.h ## end gnulib module msvc-nothrow +## begin gnulib module nan + +libtests_a_SOURCES += nan.h + +## end gnulib module nan + ## begin gnulib module nanosleep if GL_COND_OBJ_NANOSLEEP @@ -1108,7 +1439,7 @@ endif TESTS += test-nanosleep check_PROGRAMS += test-nanosleep -test_nanosleep_LDADD = $(LDADD) $(LIB_NANOSLEEP) +test_nanosleep_LDADD = $(LDADD) $(NANOSLEEP_LIB) EXTRA_DIST += test-nanosleep.c signature.h macros.h ## end gnulib module nanosleep-tests @@ -1241,7 +1572,7 @@ endif TESTS += test-pselect check_PROGRAMS += test-pselect -test_pselect_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ @LIB_PTHREAD_SIGMASK@ $(INET_PTON_LIB) +test_pselect_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ @PTHREAD_SIGMASK_LIB@ $(INET_PTON_LIB) EXTRA_DIST += test-pselect.c test-select.h macros.h signature.h ## end gnulib module pselect-tests @@ -1284,6 +1615,8 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H -e 's|@''HAVE_PTHREAD_DETACH''@|$(HAVE_PTHREAD_DETACH)|g' \ -e 's|@''HAVE_PTHREAD_JOIN''@|$(HAVE_PTHREAD_JOIN)|g' \ -e 's|@''HAVE_PTHREAD_EXIT''@|$(HAVE_PTHREAD_EXIT)|g' \ + < $(srcdir)/pthread.in.h > $@-t1 + $(AM_V_at)sed \ -e 's|@''HAVE_PTHREAD_ONCE''@|$(HAVE_PTHREAD_ONCE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_INIT''@|$(HAVE_PTHREAD_MUTEX_INIT)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_INIT''@|$(HAVE_PTHREAD_MUTEXATTR_INIT)|g' \ @@ -1325,8 +1658,9 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H -e 's|@''HAVE_PTHREAD_SPIN_TRYLOCK''@|$(HAVE_PTHREAD_SPIN_TRYLOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_UNLOCK''@|$(HAVE_PTHREAD_SPIN_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_DESTROY''@|$(HAVE_PTHREAD_SPIN_DESTROY)|g' \ - < $(srcdir)/pthread.in.h | \ - sed -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \ + < $@-t1 > $@-t2 + $(AM_V_at)sed \ + -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_INIT''@|$(REPLACE_PTHREAD_ATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_GETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_GETDETACHSTATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_SETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_SETDETACHSTATE)|g' \ @@ -1360,6 +1694,8 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H -e 's|@''REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_UNLOCK''@|$(REPLACE_PTHREAD_RWLOCK_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_DESTROY''@|$(REPLACE_PTHREAD_RWLOCK_DESTROY)|g' \ + < $@-t2 > $@-t3 + $(AM_V_at)sed \ -e 's|@''REPLACE_PTHREAD_COND_INIT''@|$(REPLACE_PTHREAD_COND_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_CONDATTR_INIT''@|$(REPLACE_PTHREAD_CONDATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_CONDATTR_DESTROY''@|$(REPLACE_PTHREAD_CONDATTR_DESTROY)|g' \ @@ -1381,9 +1717,10 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - > $@-t - $(AM_V_at)mv $@-t $@ -MOSTLYCLEANFILES += pthread.h pthread.h-t + < $@-t3 > $@-t4 + $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 + $(AM_V_at)mv $@-t4 $@ +MOSTLYCLEANFILES += pthread.h pthread.h-t1 pthread.h-t2 pthread.h-t3 pthread.h-t4 EXTRA_DIST += pthread.in.h @@ -1426,8 +1763,8 @@ endif TESTS += test-pthread_sigmask1 test-pthread_sigmask2 check_PROGRAMS += test-pthread_sigmask1 test-pthread_sigmask2 -test_pthread_sigmask1_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ -test_pthread_sigmask2_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ @LIBMULTITHREAD@ +test_pthread_sigmask1_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ +test_pthread_sigmask2_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ @LIBMULTITHREAD@ EXTRA_DIST += test-pthread_sigmask1.c test-pthread_sigmask2.c signature.h macros.h ## end gnulib module pthread_sigmask-tests @@ -1456,6 +1793,39 @@ EXTRA_DIST += test-raise.c signature.h macros.h ## end gnulib module raise-tests +## begin gnulib module random + +if GL_COND_OBJ_RANDOM +libtests_a_SOURCES += random.c +endif + +## end gnulib module random + +## begin gnulib module random-tests + +TESTS += test-random test-random-mt +check_PROGRAMS += test-random test-random-mt +test_random_mt_LDADD = $(LDADD) $(LIBINTL) $(LIBMULTITHREAD) $(YIELD_LIB) +EXTRA_DIST += test-random.c test-random-mt.c signature.h macros.h + +## end gnulib module random-tests + +## begin gnulib module random_r + +if GL_COND_OBJ_RANDOM_R +libtests_a_SOURCES += random_r.c +endif + +## end gnulib module random_r + +## begin gnulib module random_r-tests + +TESTS += test-random_r +check_PROGRAMS += test-random_r +EXTRA_DIST += test-random_r.c signature.h macros.h + +## end gnulib module random_r-tests + ## begin gnulib module realloc-gnu @@ -1500,8 +1870,7 @@ EXTRA_DIST += test-reallocarray.c signature.h macros.h ## begin gnulib module same-inode - -EXTRA_DIST += same-inode.h +libtests_a_SOURCES += same-inode.h same-inode.c ## end gnulib module same-inode @@ -1563,9 +1932,9 @@ endif TESTS += test-select test-select-in.sh test-select-out.sh # test-select-stdin has to be run by hand. check_PROGRAMS += test-select test-select-fd test-select-stdin -test_select_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ $(INET_PTON_LIB) -test_select_fd_LDADD = $(LDADD) @LIB_SELECT@ -test_select_stdin_LDADD = $(LDADD) @LIB_SELECT@ +test_select_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ $(INET_PTON_LIB) +test_select_fd_LDADD = $(LDADD) @SELECT_LIB@ +test_select_stdin_LDADD = $(LDADD) @SELECT_LIB@ EXTRA_DIST += macros.h signature.h test-select.c test-select.h test-select-fd.c test-select-in.sh test-select-out.sh test-select-stdin.c ## end gnulib module select-tests @@ -1604,13 +1973,21 @@ check_PROGRAMS += \ test-setlocale_null \ test-setlocale_null-mt-one \ test-setlocale_null-mt-all -test_setlocale_null_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ -test_setlocale_null_mt_one_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP) -test_setlocale_null_mt_all_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP) +test_setlocale_null_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ +test_setlocale_null_mt_one_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) +test_setlocale_null_mt_all_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) EXTRA_DIST += test-setlocale_null.c test-setlocale_null-mt-one.c test-setlocale_null-mt-all.c ## end gnulib module setlocale-null-tests +## begin gnulib module setlocale-null-unlocked-tests + +TESTS += test-setlocale_null-unlocked +check_PROGRAMS += test-setlocale_null-unlocked +EXTRA_DIST += test-setlocale_null-unlocked.c + +## end gnulib module setlocale-null-unlocked-tests + ## begin gnulib module setlocale-tests TESTS += test-setlocale1.sh test-setlocale2.sh @@ -1620,8 +1997,8 @@ TESTS_ENVIRONMENT += \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-setlocale1 test-setlocale2 -test_setlocale1_LDADD = $(LDADD) @LIB_SETLOCALE@ -test_setlocale2_LDADD = $(LDADD) @LIB_SETLOCALE@ +test_setlocale1_LDADD = $(LDADD) @SETLOCALE_LIB@ +test_setlocale2_LDADD = $(LDADD) @SETLOCALE_LIB@ EXTRA_DIST += test-setlocale1.sh test-setlocale1.c test-setlocale2.sh test-setlocale2.c signature.h macros.h ## end gnulib module setlocale-tests @@ -1702,6 +2079,18 @@ EXTRA_DIST += test-signbit.c minus-zero.h infinity.h macros.h ## end gnulib module signbit-tests +## begin gnulib module signed-nan + +libtests_a_SOURCES += signed-nan.h + +## end gnulib module signed-nan + +## begin gnulib module signed-snan + +libtests_a_SOURCES += signed-snan.h + +## end gnulib module signed-snan + ## begin gnulib module sigprocmask if GL_COND_OBJ_SIGPROCMASK @@ -1734,6 +2123,12 @@ EXTRA_DIST += test-sleep.c signature.h macros.h ## end gnulib module sleep-tests +## begin gnulib module snan + +libtests_a_SOURCES += snan.h + +## end gnulib module snan + ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other @@ -1842,39 +2237,11 @@ EXTRA_DIST += stat-time.h TESTS += test-stat-time check_PROGRAMS += test-stat-time -test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) +test_stat_time_LDADD = $(LDADD) $(NANOSLEEP_LIB) EXTRA_DIST += test-stat-time.c macros.h nap.h ## end gnulib module stat-time-tests -## begin gnulib module stdalign - -BUILT_SOURCES += $(STDALIGN_H) - -# We need the following in order to create <stdalign.h> when the system -# doesn't have one that works. -if GL_GENERATE_STDALIGN_H -stdalign.h: stdalign.in.h $(top_builddir)/config.status - $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h - $(AM_V_at)mv $@-t $@ -else -stdalign.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stdalign.h stdalign.h-t - -EXTRA_DIST += stdalign.in.h - -## end gnulib module stdalign - -## begin gnulib module stdalign-tests - -TESTS += test-stdalign -check_PROGRAMS += test-stdalign -EXTRA_DIST += test-stdalign.c macros.h - -## end gnulib module stdalign-tests - ## begin gnulib module stdbool-tests TESTS += test-stdbool @@ -1980,14 +2347,17 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ - < $(srcdir)/stdio.in.h | \ - sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ + < $(srcdir)/stdio.in.h > $@-t1 + $(AM_V_at)sed \ + -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ @@ -1998,6 +2368,8 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + < $@-t1 > $@-t2 + $(AM_V_at)sed \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ @@ -2035,9 +2407,10 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - > $@-t - $(AM_V_at)mv $@-t $@ -MOSTLYCLEANFILES += stdio.h stdio.h-t + < $@-t2 > $@-t3 + $(AM_V_at)rm -f $@-t1 $@-t2 + $(AM_V_at)mv $@-t3 $@ +MOSTLYCLEANFILES += stdio.h stdio.h-t1 stdio.h-t2 stdio.h-t3 if GL_COND_OBJ_STDIO_READ libtests_a_SOURCES += stdio-read.c @@ -2054,7 +2427,7 @@ EXTRA_DIST += stdio.in.h TESTS += test-stdio check_PROGRAMS += test-stdio -EXTRA_DIST += test-stdio.c +EXTRA_DIST += test-stdio.c macros.h ## end gnulib module stdio-tests @@ -2493,6 +2866,14 @@ EXTRA_DIST += test-thread_self.c test-thread_create.c macros.h ## begin gnulib module time +if GL_COND_OBJ_TIME +libtests_a_SOURCES += time.c +endif + +## end gnulib module time + +## begin gnulib module time-h + BUILT_SOURCES += time.h # We need the following in order to create <time.h> when the system @@ -2510,6 +2891,7 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $( -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ + -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ @@ -2531,7 +2913,10 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $( -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ + -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ + -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \ + -e 's|@''REPLACE_TIMESPEC_GETRES''@|$(REPLACE_TIMESPEC_GETRES)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ @@ -2547,16 +2932,32 @@ MOSTLYCLEANFILES += time.h time.h-t EXTRA_DIST += time.in.h -## end gnulib module time +## end gnulib module time-h + +## begin gnulib module time-h-tests + +TESTS += test-time-h +check_PROGRAMS += test-time-h +EXTRA_DIST += test-time-h.c + +## end gnulib module time-h-tests ## begin gnulib module time-tests TESTS += test-time check_PROGRAMS += test-time -EXTRA_DIST += test-time.c +EXTRA_DIST += test-time.c signature.h macros.h ## end gnulib module time-tests +## begin gnulib module uchar-tests + +TESTS += test-uchar +check_PROGRAMS += test-uchar +EXTRA_DIST += test-uchar.c + +## end gnulib module uchar-tests + ## begin gnulib module unicase/cased-tests TESTS += test-cased @@ -2583,7 +2984,7 @@ TESTS += unicase/test-locale-language.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-locale-language test_locale_language_SOURCES = unicase/test-locale-language.c -test_locale_language_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @INTL_MACOSX_LIBS@ $(LIBTHREAD) +test_locale_language_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @INTL_MACOSX_LIBS@ $(LIBTHREAD) EXTRA_DIST += unicase/test-locale-language.sh unicase/test-locale-language.c macros.h ## end gnulib module unicase/locale-language-tests @@ -2959,7 +3360,7 @@ TESTS_ENVIRONMENT += \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-ulc-casecmp test_ulc_casecmp_SOURCES = unicase/test-ulc-casecmp.c -test_ulc_casecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_casecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ EXTRA_DIST += unicase/test-ulc-casecmp1.sh unicase/test-ulc-casecmp2.sh unicase/test-ulc-casecmp.c unicase/test-casecmp.h macros.h @@ -2973,7 +3374,7 @@ TESTS_ENVIRONMENT += \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-ulc-casecoll test_ulc_casecoll_SOURCES = unicase/test-ulc-casecoll.c -test_ulc_casecoll_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_casecoll_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ EXTRA_DIST += unicase/test-ulc-casecoll1.sh unicase/test-ulc-casecoll2.sh unicase/test-ulc-casecoll.c unicase/test-casecmp.h macros.h @@ -3843,6 +4244,36 @@ EXTRA_DIST += unictype/test-digit.c unictype/test-digit.h macros.h ## end gnulib module unictype/digit-tests +## begin gnulib module unictype/incb-byname-tests + +TESTS += test-incb_byname +check_PROGRAMS += test-incb_byname +test_incb_byname_SOURCES = unictype/test-incb_byname.c +test_incb_byname_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-incb_byname.c macros.h + +## end gnulib module unictype/incb-byname-tests + +## begin gnulib module unictype/incb-name-tests + +TESTS += test-incb_name +check_PROGRAMS += test-incb_name +test_incb_name_SOURCES = unictype/test-incb_name.c +test_incb_name_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-incb_name.c macros.h + +## end gnulib module unictype/incb-name-tests + +## begin gnulib module unictype/incb-of-tests + +TESTS += test-incb_of +check_PROGRAMS += test-incb_of +test_incb_of_SOURCES = unictype/test-incb_of.c +test_incb_of_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-incb_of.c unictype/test-incb_of.h macros.h + +## end gnulib module unictype/incb-of-tests + ## begin gnulib module unictype/joininggroup-byname-tests TESTS += test-joininggroup_byname @@ -4413,6 +4844,26 @@ EXTRA_DIST += unictype/test-pr_hyphen.c unictype/test-predicate-part1.h unictype ## end gnulib module unictype/property-hyphen-tests +## begin gnulib module unictype/property-id-compat-math-continue-tests + +TESTS += test-pr_id_compat_math_continue +check_PROGRAMS += test-pr_id_compat_math_continue +test_pr_id_compat_math_continue_SOURCES = unictype/test-pr_id_compat_math_continue.c +test_pr_id_compat_math_continue_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-pr_id_compat_math_continue.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h + +## end gnulib module unictype/property-id-compat-math-continue-tests + +## begin gnulib module unictype/property-id-compat-math-start-tests + +TESTS += test-pr_id_compat_math_start +check_PROGRAMS += test-pr_id_compat_math_start +test_pr_id_compat_math_start_SOURCES = unictype/test-pr_id_compat_math_start.c +test_pr_id_compat_math_start_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-pr_id_compat_math_start.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h + +## end gnulib module unictype/property-id-compat-math-start-tests + ## begin gnulib module unictype/property-id-continue-tests TESTS += test-pr_id_continue @@ -4463,6 +4914,16 @@ EXTRA_DIST += unictype/test-pr_ids_trinary_operator.c unictype/test-predicate-pa ## end gnulib module unictype/property-ids-trinary-operator-tests +## begin gnulib module unictype/property-ids-unary-operator-tests + +TESTS += test-pr_ids_unary_operator +check_PROGRAMS += test-pr_ids_unary_operator +test_pr_ids_unary_operator_SOURCES = unictype/test-pr_ids_unary_operator.c +test_pr_ids_unary_operator_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-pr_ids_unary_operator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h + +## end gnulib module unictype/property-ids-unary-operator-tests + ## begin gnulib module unictype/property-ignorable-control-tests TESTS += test-pr_ignorable_control @@ -4693,6 +5154,16 @@ EXTRA_DIST += unictype/test-pr_pattern_white_space.c unictype/test-predicate-par ## end gnulib module unictype/property-pattern-white-space-tests +## begin gnulib module unictype/property-prepended-concatenation-mark-tests + +TESTS += test-pr_prepended_concatenation_mark +check_PROGRAMS += test-pr_prepended_concatenation_mark +test_pr_prepended_concatenation_mark_SOURCES = unictype/test-pr_prepended_concatenation_mark.c +test_pr_prepended_concatenation_mark_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-pr_prepended_concatenation_mark.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h + +## end gnulib module unictype/property-prepended-concatenation-mark-tests + ## begin gnulib module unictype/property-private-use-tests TESTS += test-pr_private_use @@ -4939,7 +5410,7 @@ TESTS += test-u16-grapheme-breaks check_PROGRAMS += test-u16-grapheme-breaks test_u16_grapheme_breaks_SOURCES = unigbrk/test-u16-grapheme-breaks.c test_u16_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u16-grapheme-breaks.c +EXTRA_DIST += unigbrk/test-u16-grapheme-breaks.c macros.h ## end gnulib module unigbrk/u16-grapheme-breaks-tests @@ -4949,7 +5420,7 @@ TESTS += test-u16-grapheme-next check_PROGRAMS += test-u16-grapheme-next test_u16_grapheme_next_SOURCES = unigbrk/test-u16-grapheme-next.c test_u16_grapheme_next_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u16-grapheme-next.c +EXTRA_DIST += unigbrk/test-u16-grapheme-next.c macros.h ## end gnulib module unigbrk/u16-grapheme-next-tests @@ -4959,7 +5430,7 @@ TESTS += test-u16-grapheme-prev check_PROGRAMS += test-u16-grapheme-prev test_u16_grapheme_prev_SOURCES = unigbrk/test-u16-grapheme-prev.c test_u16_grapheme_prev_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u16-grapheme-prev.c +EXTRA_DIST += unigbrk/test-u16-grapheme-prev.c macros.h ## end gnulib module unigbrk/u16-grapheme-prev-tests @@ -4969,7 +5440,7 @@ TESTS += test-u32-grapheme-breaks check_PROGRAMS += test-u32-grapheme-breaks test_u32_grapheme_breaks_SOURCES = unigbrk/test-u32-grapheme-breaks.c test_u32_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u32-grapheme-breaks.c +EXTRA_DIST += unigbrk/test-u32-grapheme-breaks.c macros.h ## end gnulib module unigbrk/u32-grapheme-breaks-tests @@ -4979,7 +5450,7 @@ TESTS += test-u32-grapheme-next check_PROGRAMS += test-u32-grapheme-next test_u32_grapheme_next_SOURCES = unigbrk/test-u32-grapheme-next.c test_u32_grapheme_next_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u32-grapheme-next.c +EXTRA_DIST += unigbrk/test-u32-grapheme-next.c macros.h ## end gnulib module unigbrk/u32-grapheme-next-tests @@ -4989,7 +5460,7 @@ TESTS += test-u32-grapheme-prev check_PROGRAMS += test-u32-grapheme-prev test_u32_grapheme_prev_SOURCES = unigbrk/test-u32-grapheme-prev.c test_u32_grapheme_prev_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u32-grapheme-prev.c +EXTRA_DIST += unigbrk/test-u32-grapheme-prev.c macros.h ## end gnulib module unigbrk/u32-grapheme-prev-tests @@ -4999,7 +5470,7 @@ TESTS += test-u8-grapheme-breaks check_PROGRAMS += test-u8-grapheme-breaks test_u8_grapheme_breaks_SOURCES = unigbrk/test-u8-grapheme-breaks.c test_u8_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u8-grapheme-breaks.c +EXTRA_DIST += unigbrk/test-u8-grapheme-breaks.c macros.h ## end gnulib module unigbrk/u8-grapheme-breaks-tests @@ -5009,7 +5480,7 @@ TESTS += test-u8-grapheme-next check_PROGRAMS += test-u8-grapheme-next test_u8_grapheme_next_SOURCES = unigbrk/test-u8-grapheme-next.c test_u8_grapheme_next_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u8-grapheme-next.c +EXTRA_DIST += unigbrk/test-u8-grapheme-next.c macros.h ## end gnulib module unigbrk/u8-grapheme-next-tests @@ -5019,7 +5490,7 @@ TESTS += test-u8-grapheme-prev check_PROGRAMS += test-u8-grapheme-prev test_u8_grapheme_prev_SOURCES = unigbrk/test-u8-grapheme-prev.c test_u8_grapheme_prev_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u8-grapheme-prev.c +EXTRA_DIST += unigbrk/test-u8-grapheme-prev.c macros.h ## end gnulib module unigbrk/u8-grapheme-prev-tests @@ -5039,7 +5510,7 @@ TESTS += unigbrk/test-uc-grapheme-breaks.sh check_PROGRAMS += test-uc-grapheme-breaks test_uc_grapheme_breaks_SOURCES = unigbrk/test-uc-grapheme-breaks.c test_uc_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-uc-grapheme-breaks.c unigbrk/test-uc-grapheme-breaks.sh unigbrk/GraphemeBreakTest.txt +EXTRA_DIST += unigbrk/test-uc-grapheme-breaks.c unigbrk/test-uc-grapheme-breaks.sh unigbrk/GraphemeBreakTest.txt macros.h ## end gnulib module unigbrk/uc-grapheme-breaks-tests @@ -5059,7 +5530,7 @@ TESTS += unigbrk/test-ulc-grapheme-breaks.sh TESTS_ENVIRONMENT += LOCALE_AR='@LOCALE_AR@' check_PROGRAMS += test-ulc-grapheme-breaks test_ulc_grapheme_breaks_SOURCES = unigbrk/test-ulc-grapheme-breaks.c -test_ulc_grapheme_breaks_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_grapheme_breaks_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ EXTRA_DIST += unigbrk/test-ulc-grapheme-breaks.sh unigbrk/test-ulc-grapheme-breaks.c macros.h ## end gnulib module unigbrk/ulc-grapheme-breaks-tests @@ -5146,6 +5617,16 @@ EXTRA_DIST += unilbrk/test-ulc-width-linebreaks.c macros.h ## end gnulib module unilbrk/ulc-width-linebreaks-tests +## begin gnulib module unimetadata/u-version-tests + +TESTS += test-u-version +check_PROGRAMS += test-u-version +test_u_version_SOURCES = unimetadata/test-u-version.c +test_u_version_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unimetadata/test-u-version.c macros.h + +## end gnulib module unimetadata/u-version-tests + ## begin gnulib module uniname/uniname-tests # Unlike other libunistring modules, this test passes only when the @@ -5385,9 +5866,9 @@ check_PROGRAMS += test-u16-vasnprintf1 test-u16-vasnprintf2 test-u16-vasnprintf3 test_u16_vasnprintf1_SOURCES = unistdio/test-u16-vasnprintf1.c test_u16_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u16_vasnprintf2_SOURCES = unistdio/test-u16-vasnprintf2.c -test_u16_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u16_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u16_vasnprintf3_SOURCES = unistdio/test-u16-vasnprintf3.c -test_u16_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u16_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ EXTRA_DIST += unistdio/test-u16-vasnprintf1.c unistdio/test-u16-asnprintf1.h unistdio/test-u16-printf1.h unistdio/test-u16-vasnprintf2.sh unistdio/test-u16-vasnprintf2.c unistdio/test-u16-vasnprintf3.sh unistdio/test-u16-vasnprintf3.c macros.h ## end gnulib module unistdio/u16-vasnprintf-tests @@ -5440,9 +5921,9 @@ check_PROGRAMS += test-u32-vasnprintf1 test-u32-vasnprintf2 test-u32-vasnprintf3 test_u32_vasnprintf1_SOURCES = unistdio/test-u32-vasnprintf1.c test_u32_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u32_vasnprintf2_SOURCES = unistdio/test-u32-vasnprintf2.c -test_u32_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u32_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u32_vasnprintf3_SOURCES = unistdio/test-u32-vasnprintf3.c -test_u32_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u32_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ EXTRA_DIST += unistdio/test-u32-vasnprintf1.c unistdio/test-u32-asnprintf1.h unistdio/test-u32-printf1.h unistdio/test-u32-vasnprintf2.sh unistdio/test-u32-vasnprintf2.c unistdio/test-u32-vasnprintf3.sh unistdio/test-u32-vasnprintf3.c macros.h ## end gnulib module unistdio/u32-vasnprintf-tests @@ -5495,9 +5976,9 @@ check_PROGRAMS += test-u8-vasnprintf1 test-u8-vasnprintf2 test-u8-vasnprintf3 test_u8_vasnprintf1_SOURCES = unistdio/test-u8-vasnprintf1.c test_u8_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u8_vasnprintf2_SOURCES = unistdio/test-u8-vasnprintf2.c -test_u8_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u8_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u8_vasnprintf3_SOURCES = unistdio/test-u8-vasnprintf3.c -test_u8_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u8_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ EXTRA_DIST += unistdio/test-u8-vasnprintf1.c unistdio/test-u8-asnprintf1.h unistdio/test-u8-printf1.h unistdio/test-u8-vasnprintf2.sh unistdio/test-u8-vasnprintf2.c unistdio/test-u8-vasnprintf3.sh unistdio/test-u8-vasnprintf3.c macros.h ## end gnulib module unistdio/u8-vasnprintf-tests @@ -5537,7 +6018,7 @@ EXTRA_DIST += unistdio/test-u8-vsprintf1.c unistdio/test-u8-printf1.h macros.h TESTS += test-ulc-asnprintf1 check_PROGRAMS += test-ulc-asnprintf1 test_ulc_asnprintf1_SOURCES = unistdio/test-ulc-asnprintf1.c -test_ulc_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) EXTRA_DIST += unistdio/test-ulc-asnprintf1.c unistdio/test-ulc-asnprintf1.h unistdio/test-ulc-printf1.h macros.h ## end gnulib module unistdio/ulc-asnprintf-tests @@ -5548,11 +6029,11 @@ TESTS += test-ulc-vasnprintf1 unistdio/test-ulc-vasnprintf2.sh unistdio/test-ulc TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-ulc-vasnprintf1 test-ulc-vasnprintf2 test-ulc-vasnprintf3 test_ulc_vasnprintf1_SOURCES = unistdio/test-ulc-vasnprintf1.c -test_ulc_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) test_ulc_vasnprintf2_SOURCES = unistdio/test-ulc-vasnprintf2.c -test_ulc_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) test_ulc_vasnprintf3_SOURCES = unistdio/test-ulc-vasnprintf3.c -test_ulc_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) EXTRA_DIST += unistdio/test-ulc-vasnprintf1.c unistdio/test-ulc-asnprintf1.h unistdio/test-ulc-printf1.h unistdio/test-ulc-vasnprintf2.sh unistdio/test-ulc-vasnprintf2.c unistdio/test-ulc-vasnprintf3.sh unistdio/test-ulc-vasnprintf3.c macros.h ## end gnulib module unistdio/ulc-vasnprintf-tests @@ -5562,7 +6043,7 @@ EXTRA_DIST += unistdio/test-ulc-vasnprintf1.c unistdio/test-ulc-asnprintf1.h uni TESTS += test-ulc-vasprintf1 check_PROGRAMS += test-ulc-vasprintf1 test_ulc_vasprintf1_SOURCES = unistdio/test-ulc-vasprintf1.c -test_ulc_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) EXTRA_DIST += unistdio/test-ulc-vasprintf1.c unistdio/test-ulc-printf1.h macros.h ## end gnulib module unistdio/ulc-vasprintf-tests @@ -5572,7 +6053,7 @@ EXTRA_DIST += unistdio/test-ulc-vasprintf1.c unistdio/test-ulc-printf1.h macros. TESTS += test-ulc-vsnprintf1 check_PROGRAMS += test-ulc-vsnprintf1 test_ulc_vsnprintf1_SOURCES = unistdio/test-ulc-vsnprintf1.c -test_ulc_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(MBRTOWC_LIB) EXTRA_DIST += unistdio/test-ulc-vsnprintf1.c unistdio/test-ulc-printf1.h macros.h ## end gnulib module unistdio/ulc-vsnprintf-tests @@ -5582,7 +6063,7 @@ EXTRA_DIST += unistdio/test-ulc-vsnprintf1.c unistdio/test-ulc-printf1.h macros. TESTS += test-ulc-vsprintf1 check_PROGRAMS += test-ulc-vsprintf1 test_ulc_vsprintf1_SOURCES = unistdio/test-ulc-vsprintf1.c -test_ulc_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(MBRTOWC_LIB) EXTRA_DIST += unistdio/test-ulc-vsprintf1.c unistdio/test-ulc-printf1.h macros.h ## end gnulib module unistdio/ulc-vsprintf-tests @@ -5717,6 +6198,16 @@ EXTRA_DIST += unistr/test-u16-next.c macros.h ## end gnulib module unistr/u16-next-tests +## begin gnulib module unistr/u16-pcpy-tests + +TESTS += test-u16-pcpy +check_PROGRAMS += test-u16-pcpy +test_u16_pcpy_SOURCES = unistr/test-u16-pcpy.c +test_u16_pcpy_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unistr/test-u16-pcpy.c unistr/test-pcpy.h macros.h + +## end gnulib module unistr/u16-pcpy-tests + ## begin gnulib module unistr/u16-prev-tests TESTS += test-u16-prev @@ -6067,6 +6558,16 @@ EXTRA_DIST += unistr/test-u32-next.c macros.h ## end gnulib module unistr/u32-next-tests +## begin gnulib module unistr/u32-pcpy-tests + +TESTS += test-u32-pcpy +check_PROGRAMS += test-u32-pcpy +test_u32_pcpy_SOURCES = unistr/test-u32-pcpy.c +test_u32_pcpy_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unistr/test-u32-pcpy.c unistr/test-pcpy.h macros.h + +## end gnulib module unistr/u32-pcpy-tests + ## begin gnulib module unistr/u32-prev-tests TESTS += test-u32-prev @@ -6417,6 +6918,16 @@ EXTRA_DIST += unistr/test-u8-next.c macros.h ## end gnulib module unistr/u8-next-tests +## begin gnulib module unistr/u8-pcpy-tests + +TESTS += test-u8-pcpy +check_PROGRAMS += test-u8-pcpy +test_u8_pcpy_SOURCES = unistr/test-u8-pcpy.c +test_u8_pcpy_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unistr/test-u8-pcpy.c unistr/test-pcpy.h macros.h + +## end gnulib module unistr/u8-pcpy-tests + ## begin gnulib module unistr/u8-prev-tests TESTS += test-u8-prev @@ -6675,7 +7186,7 @@ TESTS += uniwbrk/test-ulc-wordbreaks.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' check_PROGRAMS += test-ulc-wordbreaks test_ulc_wordbreaks_SOURCES = uniwbrk/test-ulc-wordbreaks.c -test_ulc_wordbreaks_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_wordbreaks_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ EXTRA_DIST += uniwbrk/test-ulc-wordbreaks.sh uniwbrk/test-ulc-wordbreaks.c macros.h @@ -6829,17 +7340,17 @@ endif TESTS += \ test-wcrtomb.sh \ - test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ - test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh \ - test-wcrtomb-w32-7.sh + test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \ + test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh \ + test-wcrtomb-w32-8.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-wcrtomb test-wcrtomb-w32 -test_wcrtomb_LDADD = $(LDADD) $(LIB_SETLOCALE) -EXTRA_DIST += test-wcrtomb.sh test-wcrtomb.c test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh test-wcrtomb-w32.c signature.h macros.h +test_wcrtomb_LDADD = $(LDADD) $(SETLOCALE_LIB) +EXTRA_DIST += test-wcrtomb.sh test-wcrtomb.c test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh test-wcrtomb-w32-8.sh test-wcrtomb-w32.c signature.h macros.h ## end gnulib module wcrtomb-tests @@ -6873,7 +7384,7 @@ EXTRA_DIST += test-wctype-h.c macros.h TESTS += test-wcwidth check_PROGRAMS += test-wcwidth -test_wcwidth_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) +test_wcwidth_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) EXTRA_DIST += test-wcwidth.c signature.h macros.h ## end gnulib module wcwidth-tests diff --git a/tests/Makefile.in b/tests/Makefile.in index 1da30a6a..4f17e0d7 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -14,7 +14,7 @@ @SET_MAKE@ -# Copyright (C) 2002-2022 Free Software Foundation, Inc. +# Copyright (C) 2002-2024 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -112,17 +112,27 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ - test-arpa_inet$(EXEEXT) test-array-mergesort$(EXEEXT) \ - test-assert$(EXEEXT) test-binary-io.sh test-bind$(EXEEXT) \ - test-btowc1.sh test-btowc2.sh test-c-ctype$(EXEEXT) \ - test-c-strcase.sh test-calloc-gnu$(EXEEXT) \ - test-cloexec$(EXEEXT) test-close$(EXEEXT) \ - test-connect$(EXEEXT) test-ctype$(EXEEXT) test-dup2$(EXEEXT) \ - test-environ$(EXEEXT) test-errno$(EXEEXT) \ - test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) test-fdopen$(EXEEXT) \ - test-fgetc$(EXEEXT) test-float$(EXEEXT) test-fputc$(EXEEXT) \ - test-fread$(EXEEXT) test-free$(EXEEXT) \ +TESTS = test-accept$(EXEEXT) test-alignasof$(EXEEXT) \ + test-alloca-opt$(EXEEXT) test-arpa_inet$(EXEEXT) \ + test-array-mergesort$(EXEEXT) test-assert$(EXEEXT) \ + test-binary-io.sh test-bind$(EXEEXT) test-btoc32-1.sh \ + test-btoc32-2.sh test-btoc32-3.sh test-btowc-1.sh \ + test-btowc-2.sh test-btowc-3.sh test-c-ctype$(EXEEXT) \ + test-c-strcase.sh test-c32isalnum.sh test-c32isalpha.sh \ + test-c32isblank.sh test-c32iscntrl.sh test-c32isdigit.sh \ + test-c32isgraph.sh test-c32islower.sh test-c32isprint.sh \ + test-c32ispunct.sh test-c32isspace.sh test-c32isupper.sh \ + test-c32isxdigit.sh test-c32rtomb.sh test-c32rtomb-w32-2.sh \ + test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh \ + test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh \ + test-c32rtomb-w32-7.sh test-c32rtomb-w32-8.sh \ + test-c32tolower.sh test-c32width$(EXEEXT) \ + test-calloc-gnu$(EXEEXT) test-cloexec$(EXEEXT) \ + test-close$(EXEEXT) test-connect$(EXEEXT) test-ctype$(EXEEXT) \ + test-dup2$(EXEEXT) test-environ$(EXEEXT) test-errno$(EXEEXT) \ + test-error.sh test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) \ + test-fdopen$(EXEEXT) test-fgetc$(EXEEXT) test-float$(EXEEXT) \ + test-fputc$(EXEEXT) test-fread$(EXEEXT) test-free$(EXEEXT) \ test-frexp-nolibm$(EXEEXT) test-frexpl-nolibm$(EXEEXT) \ test-fseterr$(EXEEXT) test-fstat$(EXEEXT) test-ftruncate.sh \ test-fwrite$(EXEEXT) test-getcwd-lgpl$(EXEEXT) \ @@ -134,18 +144,24 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-ioctl$(EXEEXT) test-isblank$(EXEEXT) \ test-isnand-nolibm$(EXEEXT) test-isnanf-nolibm$(EXEEXT) \ test-isnanl-nolibm$(EXEEXT) test-iswblank$(EXEEXT) \ - test-iswdigit.sh test-iswxdigit.sh test-langinfo$(EXEEXT) \ + test-iswdigit.sh test-iswpunct.sh test-iswxdigit.sh \ + test-langinfo$(EXEEXT) test-largefile$(EXEEXT) \ test-limits-h$(EXEEXT) test-listen$(EXEEXT) \ test-locale$(EXEEXT) test-localename$(EXEEXT) \ test-rwlock1$(EXEEXT) test-lock$(EXEEXT) test-once1$(EXEEXT) \ test-once2$(EXEEXT) test-lstat$(EXEEXT) \ test-malloc-gnu$(EXEEXT) test-malloca$(EXEEXT) \ - test-math$(EXEEXT) test-mbrtowc1.sh test-mbrtowc2.sh \ - test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc5.sh \ - test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh \ - test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh \ - test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh \ - test-mbrtowc-w32-7.sh test-mbsinit.sh test-memchr$(EXEEXT) \ + test-math$(EXEEXT) test-mbrtoc32-1.sh test-mbrtoc32-2.sh \ + test-mbrtoc32-3.sh test-mbrtoc32-4.sh test-mbrtoc32-5.sh \ + test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh \ + test-mbrtoc32-w32-4.sh test-mbrtoc32-w32-5.sh \ + test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh \ + test-mbrtoc32-w32-8.sh test-mbrtowc-1.sh test-mbrtowc-2.sh \ + test-mbrtowc-3.sh test-mbrtowc-4.sh test-mbrtowc-5.sh \ + test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \ + test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh \ + test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh \ + test-mbrtowc-w32-8.sh test-mbsinit.sh test-memchr$(EXEEXT) \ test-nanosleep$(EXEEXT) test-netinet_in$(EXEEXT) \ test-open$(EXEEXT) test-pathmax$(EXEEXT) test-perror.sh \ test-perror2$(EXEEXT) test-pipe$(EXEEXT) \ @@ -153,51 +169,53 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-pselect$(EXEEXT) test-pthread$(EXEEXT) \ test-pthread-thread$(EXEEXT) test-pthread_sigmask1$(EXEEXT) \ test-pthread_sigmask2$(EXEEXT) test-raise$(EXEEXT) \ - test-realloc-gnu$(EXEEXT) test-reallocarray$(EXEEXT) \ - test-sched$(EXEEXT) test-select$(EXEEXT) test-select-in.sh \ - test-select-out.sh test-setenv$(EXEEXT) \ - test-setlocale_null$(EXEEXT) \ + test-random$(EXEEXT) test-random-mt$(EXEEXT) \ + test-random_r$(EXEEXT) test-realloc-gnu$(EXEEXT) \ + test-reallocarray$(EXEEXT) test-sched$(EXEEXT) \ + test-select$(EXEEXT) test-select-in.sh test-select-out.sh \ + test-setenv$(EXEEXT) test-setlocale_null$(EXEEXT) \ test-setlocale_null-mt-one$(EXEEXT) \ - test-setlocale_null-mt-all$(EXEEXT) test-setlocale1.sh \ + test-setlocale_null-mt-all$(EXEEXT) \ + test-setlocale_null-unlocked$(EXEEXT) test-setlocale1.sh \ test-setlocale2.sh test-setsockopt$(EXEEXT) \ test-signal-h$(EXEEXT) test-signbit$(EXEEXT) \ test-sigprocmask$(EXEEXT) test-sleep$(EXEEXT) \ test-sockets$(EXEEXT) test-stat$(EXEEXT) \ - test-stat-time$(EXEEXT) test-stdalign$(EXEEXT) \ - test-stdbool$(EXEEXT) test-stdckdint$(EXEEXT) \ - test-stddef$(EXEEXT) test-stdint$(EXEEXT) test-stdio$(EXEEXT) \ - test-stdlib$(EXEEXT) test-strerror$(EXEEXT) \ - test-strerror_r$(EXEEXT) test-striconveh$(EXEEXT) \ - test-striconveha$(EXEEXT) test-string$(EXEEXT) \ - test-strncat$(EXEEXT) test-strstr$(EXEEXT) \ - test-symlink$(EXEEXT) test-sys_ioctl$(EXEEXT) \ - test-sys_select$(EXEEXT) test-sys_socket$(EXEEXT) \ - test-sys_stat$(EXEEXT) test-sys_time$(EXEEXT) \ - test-sys_types$(EXEEXT) test-sys_uio$(EXEEXT) test-init.sh \ - test-thread_self$(EXEEXT) test-thread_create$(EXEEXT) \ - test-time$(EXEEXT) test-cased$(EXEEXT) test-ignorable$(EXEEXT) \ - unicase/test-locale-language.sh test-uc_tolower$(EXEEXT) \ - test-uc_totitle$(EXEEXT) test-uc_toupper$(EXEEXT) \ - test-u16-casecmp$(EXEEXT) test-u16-casecoll$(EXEEXT) \ - test-u16-casefold$(EXEEXT) test-u16-is-cased$(EXEEXT) \ - test-u16-is-casefolded$(EXEEXT) test-u16-is-lowercase$(EXEEXT) \ - test-u16-is-titlecase$(EXEEXT) test-u16-is-uppercase$(EXEEXT) \ - test-u16-tolower$(EXEEXT) test-u16-totitle$(EXEEXT) \ - test-u16-toupper$(EXEEXT) test-u32-casecmp$(EXEEXT) \ - test-u32-casecoll$(EXEEXT) test-u32-casefold$(EXEEXT) \ - test-u32-is-cased$(EXEEXT) test-u32-is-casefolded$(EXEEXT) \ - test-u32-is-lowercase$(EXEEXT) test-u32-is-titlecase$(EXEEXT) \ - test-u32-is-uppercase$(EXEEXT) test-u32-tolower$(EXEEXT) \ - test-u32-totitle$(EXEEXT) test-u32-toupper$(EXEEXT) \ - test-u8-casecmp$(EXEEXT) test-u8-casecoll$(EXEEXT) \ - test-u8-casefold$(EXEEXT) test-u8-is-cased$(EXEEXT) \ - test-u8-is-casefolded$(EXEEXT) test-u8-is-lowercase$(EXEEXT) \ - test-u8-is-titlecase$(EXEEXT) test-u8-is-uppercase$(EXEEXT) \ - test-u8-tolower$(EXEEXT) test-u8-totitle$(EXEEXT) \ - test-u8-toupper$(EXEEXT) unicase/test-ulc-casecmp1.sh \ - unicase/test-ulc-casecmp2.sh unicase/test-ulc-casecoll1.sh \ - unicase/test-ulc-casecoll2.sh test-u16-conv-from-enc$(EXEEXT) \ - test-u16-conv-to-enc$(EXEEXT) \ + test-stat-time$(EXEEXT) test-stdbool$(EXEEXT) \ + test-stdckdint$(EXEEXT) test-stddef$(EXEEXT) \ + test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ + test-strerror$(EXEEXT) test-strerror_r$(EXEEXT) \ + test-striconveh$(EXEEXT) test-striconveha$(EXEEXT) \ + test-string$(EXEEXT) test-strncat$(EXEEXT) \ + test-strstr$(EXEEXT) test-symlink$(EXEEXT) \ + test-sys_ioctl$(EXEEXT) test-sys_select$(EXEEXT) \ + test-sys_socket$(EXEEXT) test-sys_stat$(EXEEXT) \ + test-sys_time$(EXEEXT) test-sys_types$(EXEEXT) \ + test-sys_uio$(EXEEXT) test-init.sh test-thread_self$(EXEEXT) \ + test-thread_create$(EXEEXT) test-time-h$(EXEEXT) \ + test-time$(EXEEXT) test-uchar$(EXEEXT) test-cased$(EXEEXT) \ + test-ignorable$(EXEEXT) unicase/test-locale-language.sh \ + test-uc_tolower$(EXEEXT) test-uc_totitle$(EXEEXT) \ + test-uc_toupper$(EXEEXT) test-u16-casecmp$(EXEEXT) \ + test-u16-casecoll$(EXEEXT) test-u16-casefold$(EXEEXT) \ + test-u16-is-cased$(EXEEXT) test-u16-is-casefolded$(EXEEXT) \ + test-u16-is-lowercase$(EXEEXT) test-u16-is-titlecase$(EXEEXT) \ + test-u16-is-uppercase$(EXEEXT) test-u16-tolower$(EXEEXT) \ + test-u16-totitle$(EXEEXT) test-u16-toupper$(EXEEXT) \ + test-u32-casecmp$(EXEEXT) test-u32-casecoll$(EXEEXT) \ + test-u32-casefold$(EXEEXT) test-u32-is-cased$(EXEEXT) \ + test-u32-is-casefolded$(EXEEXT) test-u32-is-lowercase$(EXEEXT) \ + test-u32-is-titlecase$(EXEEXT) test-u32-is-uppercase$(EXEEXT) \ + test-u32-tolower$(EXEEXT) test-u32-totitle$(EXEEXT) \ + test-u32-toupper$(EXEEXT) test-u8-casecmp$(EXEEXT) \ + test-u8-casecoll$(EXEEXT) test-u8-casefold$(EXEEXT) \ + test-u8-is-cased$(EXEEXT) test-u8-is-casefolded$(EXEEXT) \ + test-u8-is-lowercase$(EXEEXT) test-u8-is-titlecase$(EXEEXT) \ + test-u8-is-uppercase$(EXEEXT) test-u8-tolower$(EXEEXT) \ + test-u8-totitle$(EXEEXT) test-u8-toupper$(EXEEXT) \ + unicase/test-ulc-casecmp1.sh unicase/test-ulc-casecmp2.sh \ + unicase/test-ulc-casecoll1.sh unicase/test-ulc-casecoll2.sh \ + test-u16-conv-from-enc$(EXEEXT) test-u16-conv-to-enc$(EXEEXT) \ test-u16-strconv-from-enc$(EXEEXT) \ test-u16-strconv-to-enc$(EXEEXT) \ test-u32-conv-from-enc$(EXEEXT) test-u32-conv-to-enc$(EXEEXT) \ @@ -243,7 +261,8 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-ctype_punct$(EXEEXT) test-ctype_space$(EXEEXT) \ test-ctype_upper$(EXEEXT) test-ctype_xdigit$(EXEEXT) \ test-decdigit$(EXEEXT) test-digit$(EXEEXT) \ - test-joininggroup_byname$(EXEEXT) \ + test-incb_byname$(EXEEXT) test-incb_name$(EXEEXT) \ + test-incb_of$(EXEEXT) test-joininggroup_byname$(EXEEXT) \ test-joininggroup_name$(EXEEXT) test-joininggroup_of$(EXEEXT) \ test-joiningtype_byname$(EXEEXT) \ test-joiningtype_longname$(EXEEXT) \ @@ -286,10 +305,14 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-pr_grapheme_base$(EXEEXT) \ test-pr_grapheme_extend$(EXEEXT) \ test-pr_grapheme_link$(EXEEXT) test-pr_hex_digit$(EXEEXT) \ - test-pr_hyphen$(EXEEXT) test-pr_id_continue$(EXEEXT) \ - test-pr_id_start$(EXEEXT) test-pr_ideographic$(EXEEXT) \ + test-pr_hyphen$(EXEEXT) \ + test-pr_id_compat_math_continue$(EXEEXT) \ + test-pr_id_compat_math_start$(EXEEXT) \ + test-pr_id_continue$(EXEEXT) test-pr_id_start$(EXEEXT) \ + test-pr_ideographic$(EXEEXT) \ test-pr_ids_binary_operator$(EXEEXT) \ test-pr_ids_trinary_operator$(EXEEXT) \ + test-pr_ids_unary_operator$(EXEEXT) \ test-pr_ignorable_control$(EXEEXT) \ test-pr_iso_control$(EXEEXT) test-pr_join_control$(EXEEXT) \ test-pr_left_of_pair$(EXEEXT) test-pr_line_separator$(EXEEXT) \ @@ -307,6 +330,7 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-pr_paragraph_separator$(EXEEXT) \ test-pr_pattern_syntax$(EXEEXT) \ test-pr_pattern_white_space$(EXEEXT) \ + test-pr_prepended_concatenation_mark$(EXEEXT) \ test-pr_private_use$(EXEEXT) test-pr_punctuation$(EXEEXT) \ test-pr_quotation_mark$(EXEEXT) test-pr_radical$(EXEEXT) \ test-pr_regional_indicator$(EXEEXT) \ @@ -340,8 +364,8 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-u8-possible-linebreaks$(EXEEXT) \ test-u8-width-linebreaks$(EXEEXT) \ test-ulc-possible-linebreaks$(EXEEXT) \ - test-ulc-width-linebreaks$(EXEEXT) $(am__append_50) \ - test-canonical-decomposition$(EXEEXT) \ + test-ulc-width-linebreaks$(EXEEXT) test-u-version$(EXEEXT) \ + $(am__append_55) test-canonical-decomposition$(EXEEXT) \ test-compat-decomposition$(EXEEXT) test-composition$(EXEEXT) \ test-decomposing-form$(EXEEXT) test-decomposition$(EXEEXT) \ test-uninorm-filter-nfc$(EXEEXT) test-nfc$(EXEEXT) \ @@ -374,24 +398,25 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-u16-mblen$(EXEEXT) test-u16-mbsnlen$(EXEEXT) \ test-u16-mbtouc$(EXEEXT) test-u16-mbtouc-unsafe$(EXEEXT) \ test-u16-mbtoucr$(EXEEXT) test-u16-move$(EXEEXT) \ - test-u16-next$(EXEEXT) test-u16-prev$(EXEEXT) \ - test-u16-set$(EXEEXT) test-u16-stpcpy$(EXEEXT) \ - test-u16-stpncpy$(EXEEXT) test-u16-strcat$(EXEEXT) \ - test-u16-strchr$(EXEEXT) test-u16-strcmp$(EXEEXT) \ - test-u16-strcoll$(EXEEXT) test-u16-strcpy$(EXEEXT) \ - test-u16-strdup$(EXEEXT) test-u16-strlen$(EXEEXT) \ - test-u16-strmblen$(EXEEXT) test-u16-strmbtouc$(EXEEXT) \ - test-u16-strncat$(EXEEXT) test-u16-strncmp$(EXEEXT) \ - test-u16-strncpy$(EXEEXT) test-u16-strnlen$(EXEEXT) \ - test-u16-strstr$(EXEEXT) test-u16-strtok$(EXEEXT) \ - test-u16-to-u32$(EXEEXT) test-u16-to-u8$(EXEEXT) \ - test-u16-uctomb$(EXEEXT) test-u32-check$(EXEEXT) \ - test-u32-chr$(EXEEXT) test-u32-cmp$(EXEEXT) \ - test-u32-cmp2$(EXEEXT) test-u32-cpy-alloc$(EXEEXT) \ - test-u32-cpy$(EXEEXT) test-u32-mblen$(EXEEXT) \ - test-u32-mbsnlen$(EXEEXT) test-u32-mbtouc$(EXEEXT) \ - test-u32-mbtouc-unsafe$(EXEEXT) test-u32-mbtoucr$(EXEEXT) \ - test-u32-move$(EXEEXT) test-u32-next$(EXEEXT) \ + test-u16-next$(EXEEXT) test-u16-pcpy$(EXEEXT) \ + test-u16-prev$(EXEEXT) test-u16-set$(EXEEXT) \ + test-u16-stpcpy$(EXEEXT) test-u16-stpncpy$(EXEEXT) \ + test-u16-strcat$(EXEEXT) test-u16-strchr$(EXEEXT) \ + test-u16-strcmp$(EXEEXT) test-u16-strcoll$(EXEEXT) \ + test-u16-strcpy$(EXEEXT) test-u16-strdup$(EXEEXT) \ + test-u16-strlen$(EXEEXT) test-u16-strmblen$(EXEEXT) \ + test-u16-strmbtouc$(EXEEXT) test-u16-strncat$(EXEEXT) \ + test-u16-strncmp$(EXEEXT) test-u16-strncpy$(EXEEXT) \ + test-u16-strnlen$(EXEEXT) test-u16-strstr$(EXEEXT) \ + test-u16-strtok$(EXEEXT) test-u16-to-u32$(EXEEXT) \ + test-u16-to-u8$(EXEEXT) test-u16-uctomb$(EXEEXT) \ + test-u32-check$(EXEEXT) test-u32-chr$(EXEEXT) \ + test-u32-cmp$(EXEEXT) test-u32-cmp2$(EXEEXT) \ + test-u32-cpy-alloc$(EXEEXT) test-u32-cpy$(EXEEXT) \ + test-u32-mblen$(EXEEXT) test-u32-mbsnlen$(EXEEXT) \ + test-u32-mbtouc$(EXEEXT) test-u32-mbtouc-unsafe$(EXEEXT) \ + test-u32-mbtoucr$(EXEEXT) test-u32-move$(EXEEXT) \ + test-u32-next$(EXEEXT) test-u32-pcpy$(EXEEXT) \ test-u32-prev$(EXEEXT) test-u32-set$(EXEEXT) \ test-u32-stpcpy$(EXEEXT) test-u32-stpncpy$(EXEEXT) \ test-u32-strcat$(EXEEXT) test-u32-strchr$(EXEEXT) \ @@ -409,44 +434,54 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-u8-mblen$(EXEEXT) test-u8-mbsnlen$(EXEEXT) \ test-u8-mbtouc$(EXEEXT) test-u8-mbtouc-unsafe$(EXEEXT) \ test-u8-mbtoucr$(EXEEXT) test-u8-move$(EXEEXT) \ - test-u8-next$(EXEEXT) test-u8-prev$(EXEEXT) \ - test-u8-set$(EXEEXT) test-u8-stpcpy$(EXEEXT) \ - test-u8-stpncpy$(EXEEXT) test-u8-strcat$(EXEEXT) \ - test-u8-strchr$(EXEEXT) test-u8-strcmp$(EXEEXT) \ - test-u8-strcoll$(EXEEXT) test-u8-strcpy$(EXEEXT) \ - test-u8-strdup$(EXEEXT) test-u8-strlen$(EXEEXT) \ - test-u8-strmblen$(EXEEXT) test-u8-strmbtouc$(EXEEXT) \ - test-u8-strncat$(EXEEXT) test-u8-strncmp$(EXEEXT) \ - test-u8-strncpy$(EXEEXT) test-u8-strnlen$(EXEEXT) \ - test-u8-strstr$(EXEEXT) test-u8-strtok$(EXEEXT) \ - test-u8-to-u16$(EXEEXT) test-u8-to-u32$(EXEEXT) \ - test-u8-uctomb$(EXEEXT) test-u16-wordbreaks$(EXEEXT) \ - test-u32-wordbreaks$(EXEEXT) uniwbrk/test-uc-wordbreaks.sh \ - test-u8-wordbreaks$(EXEEXT) uniwbrk/test-ulc-wordbreaks.sh \ - test-u16-strwidth$(EXEEXT) test-u16-width$(EXEEXT) \ - test-u32-strwidth$(EXEEXT) test-u32-width$(EXEEXT) \ - test-u8-strwidth$(EXEEXT) test-u8-width$(EXEEXT) \ - test-uc_width$(EXEEXT) uniwidth/test-uc_width2.sh \ - test-unsetenv$(EXEEXT) test-usleep$(EXEEXT) \ - test-verify$(EXEEXT) test-verify.sh test-wchar$(EXEEXT) \ - test-wcrtomb.sh test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh \ + test-u8-next$(EXEEXT) test-u8-pcpy$(EXEEXT) \ + test-u8-prev$(EXEEXT) test-u8-set$(EXEEXT) \ + test-u8-stpcpy$(EXEEXT) test-u8-stpncpy$(EXEEXT) \ + test-u8-strcat$(EXEEXT) test-u8-strchr$(EXEEXT) \ + test-u8-strcmp$(EXEEXT) test-u8-strcoll$(EXEEXT) \ + test-u8-strcpy$(EXEEXT) test-u8-strdup$(EXEEXT) \ + test-u8-strlen$(EXEEXT) test-u8-strmblen$(EXEEXT) \ + test-u8-strmbtouc$(EXEEXT) test-u8-strncat$(EXEEXT) \ + test-u8-strncmp$(EXEEXT) test-u8-strncpy$(EXEEXT) \ + test-u8-strnlen$(EXEEXT) test-u8-strstr$(EXEEXT) \ + test-u8-strtok$(EXEEXT) test-u8-to-u16$(EXEEXT) \ + test-u8-to-u32$(EXEEXT) test-u8-uctomb$(EXEEXT) \ + test-u16-wordbreaks$(EXEEXT) test-u32-wordbreaks$(EXEEXT) \ + uniwbrk/test-uc-wordbreaks.sh test-u8-wordbreaks$(EXEEXT) \ + uniwbrk/test-ulc-wordbreaks.sh test-u16-strwidth$(EXEEXT) \ + test-u16-width$(EXEEXT) test-u32-strwidth$(EXEEXT) \ + test-u32-width$(EXEEXT) test-u8-strwidth$(EXEEXT) \ + test-u8-width$(EXEEXT) test-uc_width$(EXEEXT) \ + uniwidth/test-uc_width2.sh test-unsetenv$(EXEEXT) \ + test-usleep$(EXEEXT) test-verify$(EXEEXT) test-verify.sh \ + test-wchar$(EXEEXT) test-wcrtomb.sh test-wcrtomb-w32-2.sh \ test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \ test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh \ - test-wcrtomb-w32-7.sh test-wctype-h$(EXEEXT) \ - test-wcwidth$(EXEEXT) test-xalloc-die.sh + test-wcrtomb-w32-7.sh test-wcrtomb-w32-8.sh \ + test-wctype-h$(EXEEXT) test-wcwidth$(EXEEXT) \ + test-xalloc-die.sh XFAIL_TESTS = noinst_PROGRAMS = current-locale$(EXEEXT) test-localcharset$(EXEEXT) -check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ - test-arpa_inet$(EXEEXT) test-array-mergesort$(EXEEXT) \ - test-assert$(EXEEXT) test-binary-io$(EXEEXT) \ - test-bind$(EXEEXT) test-btowc$(EXEEXT) test-c-ctype$(EXEEXT) \ +check_PROGRAMS = test-accept$(EXEEXT) test-alignasof$(EXEEXT) \ + test-alloca-opt$(EXEEXT) test-arpa_inet$(EXEEXT) \ + test-array-mergesort$(EXEEXT) test-assert$(EXEEXT) \ + test-binary-io$(EXEEXT) test-bind$(EXEEXT) \ + test-btoc32$(EXEEXT) test-btowc$(EXEEXT) test-c-ctype$(EXEEXT) \ test-c-strcasecmp$(EXEEXT) test-c-strncasecmp$(EXEEXT) \ + test-c32isalnum$(EXEEXT) test-c32isalpha$(EXEEXT) \ + test-c32isblank$(EXEEXT) test-c32iscntrl$(EXEEXT) \ + test-c32isdigit$(EXEEXT) test-c32isgraph$(EXEEXT) \ + test-c32islower$(EXEEXT) test-c32isprint$(EXEEXT) \ + test-c32ispunct$(EXEEXT) test-c32isspace$(EXEEXT) \ + test-c32isupper$(EXEEXT) test-c32isxdigit$(EXEEXT) \ + test-c32rtomb$(EXEEXT) test-c32rtomb-w32$(EXEEXT) \ + test-c32tolower$(EXEEXT) test-c32width$(EXEEXT) \ test-calloc-gnu$(EXEEXT) test-cloexec$(EXEEXT) \ test-close$(EXEEXT) test-connect$(EXEEXT) test-ctype$(EXEEXT) \ test-dup2$(EXEEXT) test-environ$(EXEEXT) test-errno$(EXEEXT) \ - test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) test-fdopen$(EXEEXT) \ - test-fgetc$(EXEEXT) test-float$(EXEEXT) test-fputc$(EXEEXT) \ - test-fread$(EXEEXT) test-free$(EXEEXT) \ + test-error$(EXEEXT) test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) \ + test-fdopen$(EXEEXT) test-fgetc$(EXEEXT) test-float$(EXEEXT) \ + test-fputc$(EXEEXT) test-fread$(EXEEXT) test-free$(EXEEXT) \ test-frexp-nolibm$(EXEEXT) test-frexpl-nolibm$(EXEEXT) \ test-fseterr$(EXEEXT) test-fstat$(EXEEXT) \ test-ftruncate$(EXEEXT) test-fwrite$(EXEEXT) \ @@ -459,13 +494,15 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-isblank$(EXEEXT) test-isnand-nolibm$(EXEEXT) \ test-isnanf-nolibm$(EXEEXT) test-isnanl-nolibm$(EXEEXT) \ test-iswblank$(EXEEXT) test-iswdigit$(EXEEXT) \ - test-iswxdigit$(EXEEXT) test-langinfo$(EXEEXT) \ + test-iswpunct$(EXEEXT) test-iswxdigit$(EXEEXT) \ + test-langinfo$(EXEEXT) test-largefile$(EXEEXT) \ test-limits-h$(EXEEXT) test-listen$(EXEEXT) \ test-locale$(EXEEXT) test-localename$(EXEEXT) \ test-rwlock1$(EXEEXT) test-lock$(EXEEXT) test-once1$(EXEEXT) \ test-once2$(EXEEXT) test-lstat$(EXEEXT) \ test-malloc-gnu$(EXEEXT) test-malloca$(EXEEXT) \ - test-math$(EXEEXT) test-mbrtowc$(EXEEXT) \ + test-math$(EXEEXT) test-mbrtoc32$(EXEEXT) \ + test-mbrtoc32-w32$(EXEEXT) test-mbrtowc$(EXEEXT) \ test-mbrtowc-w32$(EXEEXT) test-mbsinit$(EXEEXT) \ test-memchr$(EXEEXT) test-nanosleep$(EXEEXT) \ test-netinet_in$(EXEEXT) test-open$(EXEEXT) \ @@ -475,50 +512,53 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-pselect$(EXEEXT) test-pthread$(EXEEXT) \ test-pthread-thread$(EXEEXT) test-pthread_sigmask1$(EXEEXT) \ test-pthread_sigmask2$(EXEEXT) test-raise$(EXEEXT) \ - test-realloc-gnu$(EXEEXT) test-reallocarray$(EXEEXT) \ - test-sched$(EXEEXT) test-select$(EXEEXT) \ - test-select-fd$(EXEEXT) test-select-stdin$(EXEEXT) \ - test-setenv$(EXEEXT) test-setlocale_null$(EXEEXT) \ + test-random$(EXEEXT) test-random-mt$(EXEEXT) \ + test-random_r$(EXEEXT) test-realloc-gnu$(EXEEXT) \ + test-reallocarray$(EXEEXT) test-sched$(EXEEXT) \ + test-select$(EXEEXT) test-select-fd$(EXEEXT) \ + test-select-stdin$(EXEEXT) test-setenv$(EXEEXT) \ + test-setlocale_null$(EXEEXT) \ test-setlocale_null-mt-one$(EXEEXT) \ - test-setlocale_null-mt-all$(EXEEXT) test-setlocale1$(EXEEXT) \ + test-setlocale_null-mt-all$(EXEEXT) \ + test-setlocale_null-unlocked$(EXEEXT) test-setlocale1$(EXEEXT) \ test-setlocale2$(EXEEXT) test-setsockopt$(EXEEXT) \ test-signal-h$(EXEEXT) test-signbit$(EXEEXT) \ test-sigprocmask$(EXEEXT) test-sleep$(EXEEXT) \ test-sockets$(EXEEXT) test-stat$(EXEEXT) \ - test-stat-time$(EXEEXT) test-stdalign$(EXEEXT) \ - test-stdbool$(EXEEXT) test-stdckdint$(EXEEXT) \ - test-stddef$(EXEEXT) test-stdint$(EXEEXT) test-stdio$(EXEEXT) \ - test-stdlib$(EXEEXT) test-strerror$(EXEEXT) \ - test-strerror_r$(EXEEXT) test-striconveh$(EXEEXT) \ - test-striconveha$(EXEEXT) test-string$(EXEEXT) \ - test-strncat$(EXEEXT) test-strstr$(EXEEXT) \ - test-symlink$(EXEEXT) test-sys_ioctl$(EXEEXT) \ - test-sys_select$(EXEEXT) test-sys_socket$(EXEEXT) \ - test-sys_stat$(EXEEXT) test-sys_time$(EXEEXT) \ - test-sys_types$(EXEEXT) test-sys_uio$(EXEEXT) \ - test-thread_self$(EXEEXT) test-thread_create$(EXEEXT) \ - test-time$(EXEEXT) test-cased$(EXEEXT) test-ignorable$(EXEEXT) \ - test-locale-language$(EXEEXT) test-uc_tolower$(EXEEXT) \ - test-uc_totitle$(EXEEXT) test-uc_toupper$(EXEEXT) \ - test-u16-casecmp$(EXEEXT) test-u16-casecoll$(EXEEXT) \ - test-u16-casefold$(EXEEXT) test-u16-is-cased$(EXEEXT) \ - test-u16-is-casefolded$(EXEEXT) test-u16-is-lowercase$(EXEEXT) \ - test-u16-is-titlecase$(EXEEXT) test-u16-is-uppercase$(EXEEXT) \ - test-u16-tolower$(EXEEXT) test-u16-totitle$(EXEEXT) \ - test-u16-toupper$(EXEEXT) test-u32-casecmp$(EXEEXT) \ - test-u32-casecoll$(EXEEXT) test-u32-casefold$(EXEEXT) \ - test-u32-is-cased$(EXEEXT) test-u32-is-casefolded$(EXEEXT) \ - test-u32-is-lowercase$(EXEEXT) test-u32-is-titlecase$(EXEEXT) \ - test-u32-is-uppercase$(EXEEXT) test-u32-tolower$(EXEEXT) \ - test-u32-totitle$(EXEEXT) test-u32-toupper$(EXEEXT) \ - test-u8-casecmp$(EXEEXT) test-u8-casecoll$(EXEEXT) \ - test-u8-casefold$(EXEEXT) test-u8-is-cased$(EXEEXT) \ - test-u8-is-casefolded$(EXEEXT) test-u8-is-lowercase$(EXEEXT) \ - test-u8-is-titlecase$(EXEEXT) test-u8-is-uppercase$(EXEEXT) \ - test-u8-tolower$(EXEEXT) test-u8-totitle$(EXEEXT) \ - test-u8-toupper$(EXEEXT) test-ulc-casecmp$(EXEEXT) \ - test-ulc-casecoll$(EXEEXT) test-u16-conv-from-enc$(EXEEXT) \ - test-u16-conv-to-enc$(EXEEXT) \ + test-stat-time$(EXEEXT) test-stdbool$(EXEEXT) \ + test-stdckdint$(EXEEXT) test-stddef$(EXEEXT) \ + test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ + test-strerror$(EXEEXT) test-strerror_r$(EXEEXT) \ + test-striconveh$(EXEEXT) test-striconveha$(EXEEXT) \ + test-string$(EXEEXT) test-strncat$(EXEEXT) \ + test-strstr$(EXEEXT) test-symlink$(EXEEXT) \ + test-sys_ioctl$(EXEEXT) test-sys_select$(EXEEXT) \ + test-sys_socket$(EXEEXT) test-sys_stat$(EXEEXT) \ + test-sys_time$(EXEEXT) test-sys_types$(EXEEXT) \ + test-sys_uio$(EXEEXT) test-thread_self$(EXEEXT) \ + test-thread_create$(EXEEXT) test-time-h$(EXEEXT) \ + test-time$(EXEEXT) test-uchar$(EXEEXT) test-cased$(EXEEXT) \ + test-ignorable$(EXEEXT) test-locale-language$(EXEEXT) \ + test-uc_tolower$(EXEEXT) test-uc_totitle$(EXEEXT) \ + test-uc_toupper$(EXEEXT) test-u16-casecmp$(EXEEXT) \ + test-u16-casecoll$(EXEEXT) test-u16-casefold$(EXEEXT) \ + test-u16-is-cased$(EXEEXT) test-u16-is-casefolded$(EXEEXT) \ + test-u16-is-lowercase$(EXEEXT) test-u16-is-titlecase$(EXEEXT) \ + test-u16-is-uppercase$(EXEEXT) test-u16-tolower$(EXEEXT) \ + test-u16-totitle$(EXEEXT) test-u16-toupper$(EXEEXT) \ + test-u32-casecmp$(EXEEXT) test-u32-casecoll$(EXEEXT) \ + test-u32-casefold$(EXEEXT) test-u32-is-cased$(EXEEXT) \ + test-u32-is-casefolded$(EXEEXT) test-u32-is-lowercase$(EXEEXT) \ + test-u32-is-titlecase$(EXEEXT) test-u32-is-uppercase$(EXEEXT) \ + test-u32-tolower$(EXEEXT) test-u32-totitle$(EXEEXT) \ + test-u32-toupper$(EXEEXT) test-u8-casecmp$(EXEEXT) \ + test-u8-casecoll$(EXEEXT) test-u8-casefold$(EXEEXT) \ + test-u8-is-cased$(EXEEXT) test-u8-is-casefolded$(EXEEXT) \ + test-u8-is-lowercase$(EXEEXT) test-u8-is-titlecase$(EXEEXT) \ + test-u8-is-uppercase$(EXEEXT) test-u8-tolower$(EXEEXT) \ + test-u8-totitle$(EXEEXT) test-u8-toupper$(EXEEXT) \ + test-ulc-casecmp$(EXEEXT) test-ulc-casecoll$(EXEEXT) \ + test-u16-conv-from-enc$(EXEEXT) test-u16-conv-to-enc$(EXEEXT) \ test-u16-strconv-from-enc$(EXEEXT) \ test-u16-strconv-to-enc$(EXEEXT) \ test-u32-conv-from-enc$(EXEEXT) test-u32-conv-to-enc$(EXEEXT) \ @@ -564,7 +604,8 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-ctype_punct$(EXEEXT) test-ctype_space$(EXEEXT) \ test-ctype_upper$(EXEEXT) test-ctype_xdigit$(EXEEXT) \ test-decdigit$(EXEEXT) test-digit$(EXEEXT) \ - test-joininggroup_byname$(EXEEXT) \ + test-incb_byname$(EXEEXT) test-incb_name$(EXEEXT) \ + test-incb_of$(EXEEXT) test-joininggroup_byname$(EXEEXT) \ test-joininggroup_name$(EXEEXT) test-joininggroup_of$(EXEEXT) \ test-joiningtype_byname$(EXEEXT) \ test-joiningtype_longname$(EXEEXT) \ @@ -607,10 +648,14 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-pr_grapheme_base$(EXEEXT) \ test-pr_grapheme_extend$(EXEEXT) \ test-pr_grapheme_link$(EXEEXT) test-pr_hex_digit$(EXEEXT) \ - test-pr_hyphen$(EXEEXT) test-pr_id_continue$(EXEEXT) \ - test-pr_id_start$(EXEEXT) test-pr_ideographic$(EXEEXT) \ + test-pr_hyphen$(EXEEXT) \ + test-pr_id_compat_math_continue$(EXEEXT) \ + test-pr_id_compat_math_start$(EXEEXT) \ + test-pr_id_continue$(EXEEXT) test-pr_id_start$(EXEEXT) \ + test-pr_ideographic$(EXEEXT) \ test-pr_ids_binary_operator$(EXEEXT) \ test-pr_ids_trinary_operator$(EXEEXT) \ + test-pr_ids_unary_operator$(EXEEXT) \ test-pr_ignorable_control$(EXEEXT) \ test-pr_iso_control$(EXEEXT) test-pr_join_control$(EXEEXT) \ test-pr_left_of_pair$(EXEEXT) test-pr_line_separator$(EXEEXT) \ @@ -628,6 +673,7 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-pr_paragraph_separator$(EXEEXT) \ test-pr_pattern_syntax$(EXEEXT) \ test-pr_pattern_white_space$(EXEEXT) \ + test-pr_prepended_concatenation_mark$(EXEEXT) \ test-pr_private_use$(EXEEXT) test-pr_punctuation$(EXEEXT) \ test-pr_quotation_mark$(EXEEXT) test-pr_radical$(EXEEXT) \ test-pr_regional_indicator$(EXEEXT) \ @@ -661,8 +707,8 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-u8-possible-linebreaks$(EXEEXT) \ test-u8-width-linebreaks$(EXEEXT) \ test-ulc-possible-linebreaks$(EXEEXT) \ - test-ulc-width-linebreaks$(EXEEXT) $(am__EXEEXT_2) \ - test-canonical-decomposition$(EXEEXT) \ + test-ulc-width-linebreaks$(EXEEXT) test-u-version$(EXEEXT) \ + $(am__EXEEXT_2) test-canonical-decomposition$(EXEEXT) \ test-compat-decomposition$(EXEEXT) test-composition$(EXEEXT) \ test-decomposing-form$(EXEEXT) test-decomposition$(EXEEXT) \ test-uninorm-filter-nfc$(EXEEXT) test-nfc$(EXEEXT) \ @@ -693,24 +739,25 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-u16-mblen$(EXEEXT) test-u16-mbsnlen$(EXEEXT) \ test-u16-mbtouc$(EXEEXT) test-u16-mbtouc-unsafe$(EXEEXT) \ test-u16-mbtoucr$(EXEEXT) test-u16-move$(EXEEXT) \ - test-u16-next$(EXEEXT) test-u16-prev$(EXEEXT) \ - test-u16-set$(EXEEXT) test-u16-stpcpy$(EXEEXT) \ - test-u16-stpncpy$(EXEEXT) test-u16-strcat$(EXEEXT) \ - test-u16-strchr$(EXEEXT) test-u16-strcmp$(EXEEXT) \ - test-u16-strcoll$(EXEEXT) test-u16-strcpy$(EXEEXT) \ - test-u16-strdup$(EXEEXT) test-u16-strlen$(EXEEXT) \ - test-u16-strmblen$(EXEEXT) test-u16-strmbtouc$(EXEEXT) \ - test-u16-strncat$(EXEEXT) test-u16-strncmp$(EXEEXT) \ - test-u16-strncpy$(EXEEXT) test-u16-strnlen$(EXEEXT) \ - test-u16-strstr$(EXEEXT) test-u16-strtok$(EXEEXT) \ - test-u16-to-u32$(EXEEXT) test-u16-to-u8$(EXEEXT) \ - test-u16-uctomb$(EXEEXT) test-u32-check$(EXEEXT) \ - test-u32-chr$(EXEEXT) test-u32-cmp$(EXEEXT) \ - test-u32-cmp2$(EXEEXT) test-u32-cpy-alloc$(EXEEXT) \ - test-u32-cpy$(EXEEXT) test-u32-mblen$(EXEEXT) \ - test-u32-mbsnlen$(EXEEXT) test-u32-mbtouc$(EXEEXT) \ - test-u32-mbtouc-unsafe$(EXEEXT) test-u32-mbtoucr$(EXEEXT) \ - test-u32-move$(EXEEXT) test-u32-next$(EXEEXT) \ + test-u16-next$(EXEEXT) test-u16-pcpy$(EXEEXT) \ + test-u16-prev$(EXEEXT) test-u16-set$(EXEEXT) \ + test-u16-stpcpy$(EXEEXT) test-u16-stpncpy$(EXEEXT) \ + test-u16-strcat$(EXEEXT) test-u16-strchr$(EXEEXT) \ + test-u16-strcmp$(EXEEXT) test-u16-strcoll$(EXEEXT) \ + test-u16-strcpy$(EXEEXT) test-u16-strdup$(EXEEXT) \ + test-u16-strlen$(EXEEXT) test-u16-strmblen$(EXEEXT) \ + test-u16-strmbtouc$(EXEEXT) test-u16-strncat$(EXEEXT) \ + test-u16-strncmp$(EXEEXT) test-u16-strncpy$(EXEEXT) \ + test-u16-strnlen$(EXEEXT) test-u16-strstr$(EXEEXT) \ + test-u16-strtok$(EXEEXT) test-u16-to-u32$(EXEEXT) \ + test-u16-to-u8$(EXEEXT) test-u16-uctomb$(EXEEXT) \ + test-u32-check$(EXEEXT) test-u32-chr$(EXEEXT) \ + test-u32-cmp$(EXEEXT) test-u32-cmp2$(EXEEXT) \ + test-u32-cpy-alloc$(EXEEXT) test-u32-cpy$(EXEEXT) \ + test-u32-mblen$(EXEEXT) test-u32-mbsnlen$(EXEEXT) \ + test-u32-mbtouc$(EXEEXT) test-u32-mbtouc-unsafe$(EXEEXT) \ + test-u32-mbtoucr$(EXEEXT) test-u32-move$(EXEEXT) \ + test-u32-next$(EXEEXT) test-u32-pcpy$(EXEEXT) \ test-u32-prev$(EXEEXT) test-u32-set$(EXEEXT) \ test-u32-stpcpy$(EXEEXT) test-u32-stpncpy$(EXEEXT) \ test-u32-strcat$(EXEEXT) test-u32-strchr$(EXEEXT) \ @@ -728,93 +775,100 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-u8-mblen$(EXEEXT) test-u8-mbsnlen$(EXEEXT) \ test-u8-mbtouc$(EXEEXT) test-u8-mbtouc-unsafe$(EXEEXT) \ test-u8-mbtoucr$(EXEEXT) test-u8-move$(EXEEXT) \ - test-u8-next$(EXEEXT) test-u8-prev$(EXEEXT) \ - test-u8-set$(EXEEXT) test-u8-stpcpy$(EXEEXT) \ - test-u8-stpncpy$(EXEEXT) test-u8-strcat$(EXEEXT) \ - test-u8-strchr$(EXEEXT) test-u8-strcmp$(EXEEXT) \ - test-u8-strcoll$(EXEEXT) test-u8-strcpy$(EXEEXT) \ - test-u8-strdup$(EXEEXT) test-u8-strlen$(EXEEXT) \ - test-u8-strmblen$(EXEEXT) test-u8-strmbtouc$(EXEEXT) \ - test-u8-strncat$(EXEEXT) test-u8-strncmp$(EXEEXT) \ - test-u8-strncpy$(EXEEXT) test-u8-strnlen$(EXEEXT) \ - test-u8-strstr$(EXEEXT) test-u8-strtok$(EXEEXT) \ - test-u8-to-u16$(EXEEXT) test-u8-to-u32$(EXEEXT) \ - test-u8-uctomb$(EXEEXT) test-u16-wordbreaks$(EXEEXT) \ - test-u32-wordbreaks$(EXEEXT) test-uc-wordbreaks$(EXEEXT) \ - test-u8-wordbreaks$(EXEEXT) test-ulc-wordbreaks$(EXEEXT) \ - test-u16-strwidth$(EXEEXT) test-u16-width$(EXEEXT) \ - test-u32-strwidth$(EXEEXT) test-u32-width$(EXEEXT) \ - test-u8-strwidth$(EXEEXT) test-u8-width$(EXEEXT) \ - test-uc_width$(EXEEXT) test-uc_width2$(EXEEXT) \ - test-unsetenv$(EXEEXT) test-usleep$(EXEEXT) \ - test-verify$(EXEEXT) test-wchar$(EXEEXT) test-wcrtomb$(EXEEXT) \ - test-wcrtomb-w32$(EXEEXT) test-wctype-h$(EXEEXT) \ - test-wcwidth$(EXEEXT) test-xalloc-die$(EXEEXT) + test-u8-next$(EXEEXT) test-u8-pcpy$(EXEEXT) \ + test-u8-prev$(EXEEXT) test-u8-set$(EXEEXT) \ + test-u8-stpcpy$(EXEEXT) test-u8-stpncpy$(EXEEXT) \ + test-u8-strcat$(EXEEXT) test-u8-strchr$(EXEEXT) \ + test-u8-strcmp$(EXEEXT) test-u8-strcoll$(EXEEXT) \ + test-u8-strcpy$(EXEEXT) test-u8-strdup$(EXEEXT) \ + test-u8-strlen$(EXEEXT) test-u8-strmblen$(EXEEXT) \ + test-u8-strmbtouc$(EXEEXT) test-u8-strncat$(EXEEXT) \ + test-u8-strncmp$(EXEEXT) test-u8-strncpy$(EXEEXT) \ + test-u8-strnlen$(EXEEXT) test-u8-strstr$(EXEEXT) \ + test-u8-strtok$(EXEEXT) test-u8-to-u16$(EXEEXT) \ + test-u8-to-u32$(EXEEXT) test-u8-uctomb$(EXEEXT) \ + test-u16-wordbreaks$(EXEEXT) test-u32-wordbreaks$(EXEEXT) \ + test-uc-wordbreaks$(EXEEXT) test-u8-wordbreaks$(EXEEXT) \ + test-ulc-wordbreaks$(EXEEXT) test-u16-strwidth$(EXEEXT) \ + test-u16-width$(EXEEXT) test-u32-strwidth$(EXEEXT) \ + test-u32-width$(EXEEXT) test-u8-strwidth$(EXEEXT) \ + test-u8-width$(EXEEXT) test-uc_width$(EXEEXT) \ + test-uc_width2$(EXEEXT) test-unsetenv$(EXEEXT) \ + test-usleep$(EXEEXT) test-verify$(EXEEXT) test-wchar$(EXEEXT) \ + test-wcrtomb$(EXEEXT) test-wcrtomb-w32$(EXEEXT) \ + test-wctype-h$(EXEEXT) test-wcwidth$(EXEEXT) \ + test-xalloc-die$(EXEEXT) EXTRA_PROGRAMS = test-verify-try$(EXEEXT) @GL_COND_OBJ_ACCEPT_TRUE@am__append_1 = accept.c @GL_COND_OBJ_BIND_TRUE@am__append_2 = bind.c @GL_COND_OBJ_BTOWC_TRUE@am__append_3 = btowc.c -@GL_COND_OBJ_CLOSE_TRUE@am__append_4 = close.c -@GL_COND_OBJ_CONNECT_TRUE@am__append_5 = connect.c -@GL_COND_OBJ_DUP2_TRUE@am__append_6 = dup2.c -@GL_COND_OBJ_ERROR_TRUE@am__append_7 = error.c -@GL_COND_OBJ_FCNTL_TRUE@am__append_8 = fcntl.c -@GL_COND_OBJ_FDOPEN_TRUE@am__append_9 = fdopen.c -@GL_COND_OBJ_FSTAT_TRUE@am__append_10 = fstat.c -@GL_COND_OBJ_FTRUNCATE_TRUE@am__append_11 = ftruncate.c -@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__append_12 = getcwd-lgpl.c -@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__append_13 = getdtablesize.c -@GL_COND_OBJ_GETPAGESIZE_TRUE@am__append_14 = getpagesize.c -@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__append_15 = gettimeofday.c -@GL_COND_OBJ_INET_PTON_TRUE@am__append_16 = inet_pton.c -@GL_COND_OBJ_IOCTL_TRUE@am__append_17 = ioctl.c -@GL_COND_OBJ_ISBLANK_TRUE@am__append_18 = isblank.c -@GL_COND_OBJ_LISTEN_TRUE@am__append_19 = listen.c -@GL_COND_OBJ_LSTAT_TRUE@am__append_20 = lstat.c -@GL_COND_OBJ_MBTOWC_TRUE@am__append_21 = mbtowc.c -@GL_COND_OBJ_MSVC_INVAL_TRUE@am__append_22 = msvc-inval.c -@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__append_23 = msvc-nothrow.c -@GL_COND_OBJ_NANOSLEEP_TRUE@am__append_24 = nanosleep.c -@GL_COND_OBJ_OPEN_TRUE@am__append_25 = open.c -@GL_COND_OBJ_PERROR_TRUE@am__append_26 = perror.c -@GL_COND_OBJ_PIPE_TRUE@am__append_27 = pipe.c -@GL_COND_OBJ_PSELECT_TRUE@am__append_28 = pselect.c -@GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__append_29 = pthread-thread.c -@GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__append_30 = pthread_sigmask.c -@GL_COND_OBJ_PUTENV_TRUE@am__append_31 = putenv.c -@GL_COND_OBJ_RAISE_TRUE@am__append_32 = raise.c -@GL_COND_OBJ_REALLOCARRAY_TRUE@am__append_33 = reallocarray.c -@GL_COND_OBJ_SCHED_YIELD_TRUE@am__append_34 = sched_yield.c -@GL_COND_OBJ_SELECT_TRUE@am__append_35 = select.c -@GL_COND_OBJ_SETENV_TRUE@am__append_36 = setenv.c -@GL_COND_OBJ_SETLOCALE_TRUE@am__append_37 = setlocale.c -@GL_COND_OBJ_SETSOCKOPT_TRUE@am__append_38 = setsockopt.c -@GL_COND_OBJ_SIGPROCMASK_TRUE@am__append_39 = sigprocmask.c -@GL_COND_OBJ_SLEEP_TRUE@am__append_40 = sleep.c -@GL_COND_OBJ_SOCKET_TRUE@am__append_41 = socket.c -@GL_COND_OBJ_STAT_TRUE@am__append_42 = stat.c -@GL_COND_OBJ_STDIO_READ_TRUE@am__append_43 = stdio-read.c -@GL_COND_OBJ_STDIO_WRITE_TRUE@am__append_44 = stdio-write.c -@GL_COND_OBJ_STRERROR_TRUE@am__append_45 = strerror.c -@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__append_46 = strerror-override.c -@GL_COND_OBJ_SYMLINK_TRUE@am__append_47 = symlink.c -@WOE32DLL_FALSE@am__append_48 = test-categ_none -@WOE32DLL_FALSE@am__append_49 = test-categ_none +@GL_COND_OBJ_C32RTOMB_TRUE@am__append_4 = c32rtomb.c +@GL_COND_OBJ_CLOSE_TRUE@am__append_5 = close.c +@GL_COND_OBJ_CONNECT_TRUE@am__append_6 = connect.c +@GL_COND_OBJ_DUP2_TRUE@am__append_7 = dup2.c +@GL_COND_OBJ_ERROR_TRUE@am__append_8 = error.c +@GL_COND_OBJ_FCNTL_TRUE@am__append_9 = fcntl.c +@GL_COND_OBJ_FDOPEN_TRUE@am__append_10 = fdopen.c +@GL_COND_OBJ_FSTAT_TRUE@am__append_11 = fstat.c +@GL_COND_OBJ_FTRUNCATE_TRUE@am__append_12 = ftruncate.c +@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__append_13 = getcwd-lgpl.c +@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__append_14 = getdtablesize.c +@GL_COND_OBJ_GETPAGESIZE_TRUE@am__append_15 = getpagesize.c +@GL_COND_OBJ_GETPROGNAME_TRUE@am__append_16 = getprogname.c +@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__append_17 = gettimeofday.c +@GL_COND_OBJ_INET_PTON_TRUE@am__append_18 = inet_pton.c +@GL_COND_OBJ_IOCTL_TRUE@am__append_19 = ioctl.c +@GL_COND_OBJ_ISBLANK_TRUE@am__append_20 = isblank.c +@GL_COND_OBJ_LISTEN_TRUE@am__append_21 = listen.c +@GL_COND_OBJ_LSTAT_TRUE@am__append_22 = lstat.c +@GL_COND_OBJ_MBTOWC_TRUE@am__append_23 = mbtowc.c +@GL_COND_OBJ_MSVC_INVAL_TRUE@am__append_24 = msvc-inval.c +@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__append_25 = msvc-nothrow.c +@GL_COND_OBJ_NANOSLEEP_TRUE@am__append_26 = nanosleep.c +@GL_COND_OBJ_OPEN_TRUE@am__append_27 = open.c +@GL_COND_OBJ_PERROR_TRUE@am__append_28 = perror.c +@GL_COND_OBJ_PIPE_TRUE@am__append_29 = pipe.c +@GL_COND_OBJ_PSELECT_TRUE@am__append_30 = pselect.c +@GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__append_31 = pthread-thread.c +@GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__append_32 = pthread_sigmask.c +@GL_COND_OBJ_PUTENV_TRUE@am__append_33 = putenv.c +@GL_COND_OBJ_RAISE_TRUE@am__append_34 = raise.c +@GL_COND_OBJ_RANDOM_TRUE@am__append_35 = random.c +@GL_COND_OBJ_RANDOM_R_TRUE@am__append_36 = random_r.c +@GL_COND_OBJ_REALLOCARRAY_TRUE@am__append_37 = reallocarray.c +@GL_COND_OBJ_SCHED_YIELD_TRUE@am__append_38 = sched_yield.c +@GL_COND_OBJ_SELECT_TRUE@am__append_39 = select.c +@GL_COND_OBJ_SETENV_TRUE@am__append_40 = setenv.c +@GL_COND_OBJ_SETLOCALE_TRUE@am__append_41 = setlocale.c +@GL_COND_OBJ_SETSOCKOPT_TRUE@am__append_42 = setsockopt.c +@GL_COND_OBJ_SIGPROCMASK_TRUE@am__append_43 = sigprocmask.c +@GL_COND_OBJ_SLEEP_TRUE@am__append_44 = sleep.c +@GL_COND_OBJ_SOCKET_TRUE@am__append_45 = socket.c +@GL_COND_OBJ_STAT_TRUE@am__append_46 = stat.c +@GL_COND_OBJ_STDIO_READ_TRUE@am__append_47 = stdio-read.c +@GL_COND_OBJ_STDIO_WRITE_TRUE@am__append_48 = stdio-write.c +@GL_COND_OBJ_STRERROR_TRUE@am__append_49 = strerror.c +@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__append_50 = strerror-override.c +@GL_COND_OBJ_SYMLINK_TRUE@am__append_51 = symlink.c +@GL_COND_OBJ_TIME_TRUE@am__append_52 = time.c +@WOE32DLL_FALSE@am__append_53 = test-categ_none +@WOE32DLL_FALSE@am__append_54 = test-categ_none # Unlike other libunistring modules, this test passes only when the # same version of uniname/uniname.c is used (even if it is newer). -@LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@am__append_50 = uniname/test-uninames.sh -@LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@am__append_51 = test-uninames -@GL_COND_OBJ_UNSETENV_TRUE@am__append_52 = unsetenv.c -@GL_COND_OBJ_USLEEP_TRUE@am__append_53 = usleep.c -@GL_COND_OBJ_WCRTOMB_TRUE@am__append_54 = wcrtomb.c -@GL_COND_OBJ_WCTOB_TRUE@am__append_55 = wctob.c -@GL_COND_OBJ_WCTOMB_TRUE@am__append_56 = wctomb.c -@GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__append_57 = windows-thread.c -@GL_COND_OBJ_WINDOWS_TLS_TRUE@am__append_58 = windows-tls.c +@LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@am__append_55 = uniname/test-uninames.sh +@LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@am__append_56 = test-uninames +@GL_COND_OBJ_UNSETENV_TRUE@am__append_57 = unsetenv.c +@GL_COND_OBJ_USLEEP_TRUE@am__append_58 = usleep.c +@GL_COND_OBJ_WCRTOMB_TRUE@am__append_59 = wcrtomb.c +@GL_COND_OBJ_WCTOB_TRUE@am__append_60 = wctob.c +@GL_COND_OBJ_WCTOMB_TRUE@am__append_61 = wctomb.c +@GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__append_62 = windows-thread.c +@GL_COND_OBJ_WINDOWS_TLS_TRUE@am__append_63 = windows-tls.c subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ + $(top_srcdir)/gnulib-m4/__inline.m4 \ $(top_srcdir)/gnulib-m4/absolute-header.m4 \ $(top_srcdir)/gnulib-m4/alloca.m4 \ $(top_srcdir)/gnulib-m4/arpa_inet_h.m4 \ @@ -822,6 +876,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ $(top_srcdir)/gnulib-m4/btowc.m4 \ $(top_srcdir)/gnulib-m4/builtin-expect.m4 \ $(top_srcdir)/gnulib-m4/c-bool.m4 \ + $(top_srcdir)/gnulib-m4/c32rtomb.m4 \ $(top_srcdir)/gnulib-m4/calloc.m4 \ $(top_srcdir)/gnulib-m4/close.m4 \ $(top_srcdir)/gnulib-m4/codeset.m4 \ @@ -832,6 +887,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ $(top_srcdir)/gnulib-m4/environ.m4 \ $(top_srcdir)/gnulib-m4/errno_h.m4 \ $(top_srcdir)/gnulib-m4/error.m4 \ + $(top_srcdir)/gnulib-m4/error_h.m4 \ $(top_srcdir)/gnulib-m4/exponentd.m4 \ $(top_srcdir)/gnulib-m4/exponentf.m4 \ $(top_srcdir)/gnulib-m4/exponentl.m4 \ @@ -876,6 +932,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ $(top_srcdir)/gnulib-m4/isnanl.m4 \ $(top_srcdir)/gnulib-m4/iswblank.m4 \ $(top_srcdir)/gnulib-m4/iswdigit.m4 \ + $(top_srcdir)/gnulib-m4/iswpunct.m4 \ $(top_srcdir)/gnulib-m4/iswxdigit.m4 \ $(top_srcdir)/gnulib-m4/langinfo_h.m4 \ $(top_srcdir)/gnulib-m4/largefile.m4 \ @@ -901,6 +958,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ $(top_srcdir)/gnulib-m4/math_h.m4 \ $(top_srcdir)/gnulib-m4/mbchar.m4 \ $(top_srcdir)/gnulib-m4/mbiter.m4 \ + $(top_srcdir)/gnulib-m4/mbrtoc32.m4 \ $(top_srcdir)/gnulib-m4/mbrtowc.m4 \ $(top_srcdir)/gnulib-m4/mbsinit.m4 \ $(top_srcdir)/gnulib-m4/mbstate_t.m4 \ @@ -913,6 +971,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ $(top_srcdir)/gnulib-m4/msvc-nothrow.m4 \ $(top_srcdir)/gnulib-m4/multiarch.m4 \ $(top_srcdir)/gnulib-m4/musl.m4 \ + $(top_srcdir)/gnulib-m4/nan-mips.m4 \ $(top_srcdir)/gnulib-m4/nanosleep.m4 \ $(top_srcdir)/gnulib-m4/netinet_in_h.m4 \ $(top_srcdir)/gnulib-m4/nocrash.m4 \ @@ -933,6 +992,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ $(top_srcdir)/gnulib-m4/pthread_sigmask.m4 \ $(top_srcdir)/gnulib-m4/putenv.m4 \ $(top_srcdir)/gnulib-m4/raise.m4 \ + $(top_srcdir)/gnulib-m4/random.m4 \ + $(top_srcdir)/gnulib-m4/random_r.m4 \ $(top_srcdir)/gnulib-m4/realloc.m4 \ $(top_srcdir)/gnulib-m4/reallocarray.m4 \ $(top_srcdir)/gnulib-m4/relocatable-lib.m4 \ @@ -948,6 +1009,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ $(top_srcdir)/gnulib-m4/signbit.m4 \ $(top_srcdir)/gnulib-m4/size_max.m4 \ $(top_srcdir)/gnulib-m4/sleep.m4 \ + $(top_srcdir)/gnulib-m4/snan.m4 \ $(top_srcdir)/gnulib-m4/socketlib.m4 \ $(top_srcdir)/gnulib-m4/sockets.m4 \ $(top_srcdir)/gnulib-m4/socklen.m4 \ @@ -976,7 +1038,13 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ $(top_srcdir)/gnulib-m4/sys_uio_h.m4 \ $(top_srcdir)/gnulib-m4/thread.m4 \ $(top_srcdir)/gnulib-m4/threadlib.m4 \ + $(top_srcdir)/gnulib-m4/time.m4 \ $(top_srcdir)/gnulib-m4/time_h.m4 \ + $(top_srcdir)/gnulib-m4/uchar_h.m4 \ + $(top_srcdir)/gnulib-m4/unicase_h.m4 \ + $(top_srcdir)/gnulib-m4/unictype_h.m4 \ + $(top_srcdir)/gnulib-m4/unimetadata_h.m4 \ + $(top_srcdir)/gnulib-m4/uninorm_h.m4 \ $(top_srcdir)/gnulib-m4/unistd_h.m4 \ $(top_srcdir)/gnulib-m4/usleep.m4 \ $(top_srcdir)/gnulib-m4/vasnprintf.m4 \ @@ -992,7 +1060,6 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ $(top_srcdir)/gnulib-m4/wint_t.m4 \ $(top_srcdir)/gnulib-m4/xalloc.m4 \ $(top_srcdir)/gnulib-m4/xsize.m4 \ - $(top_srcdir)/gnulib-m4/year2038.m4 \ $(top_srcdir)/gnulib-m4/yield.m4 \ $(top_srcdir)/gnulib-m4/zzgnulib.m4 \ $(top_srcdir)/m4/exported.m4 \ @@ -1020,105 +1087,115 @@ am__v_AR_1 = libtests_a_AR = $(AR) $(ARFLAGS) am__DEPENDENCIES_1 = am__libtests_a_SOURCES_DIST = accept.c basename-lgpl.c binary-io.h \ - binary-io.c bind.c btowc.c cloexec.c close.c connect.c dup2.c \ - error.c exitfail.c fcntl.c fd-hook.c fdopen.c fstat.c \ - ftruncate.c getcwd-lgpl.c getdtablesize.c getpagesize.c \ - getprogname.h getprogname.c gettext.h gettimeofday.c ialloc.c \ - inet_pton.c ioctl.c isblank.c listen.c lstat.c mbtowc.c \ - msvc-inval.c msvc-nothrow.c nanosleep.c open.c perror.c pipe.c \ - pselect.c pthread-thread.c pthread_sigmask.c putenv.c raise.c \ - reallocarray.c sched_yield.c select.c setenv.c setlocale.c \ - setsockopt.c sigprocmask.c sleep.c socket.c sockets.h \ + binary-io.c bind.c btoc32.c btowc.c c32rtomb.c c32tob.c \ + cloexec.c close.c connect.c dup2.c error.c exitfail.c fcntl.c \ + fd-hook.c fdopen.c fstat.c ftruncate.c getcwd-lgpl.c \ + getdtablesize.c getpagesize.c getprogname.c gettext.h \ + gettimeofday.c ialloc.c inet_pton.c ioctl.c isblank.c listen.c \ + lstat.c mbtowc.c msvc-inval.c msvc-nothrow.c nan.h nanosleep.c \ + open.c perror.c pipe.c pselect.c pthread-thread.c \ + pthread_sigmask.c putenv.c raise.c random.c random_r.c \ + reallocarray.c same-inode.h same-inode.c sched_yield.c \ + select.c setenv.c setlocale.c setsockopt.c signed-nan.h \ + signed-snan.h sigprocmask.c sleep.c snan.h socket.c sockets.h \ sockets.c stat.c stat-time.c stdio-read.c stdio-write.c \ strerror.c strerror-override.c symlink.c sys_socket.c \ - glthread/thread.h glthread/thread.c unsetenv.c usleep.c \ + glthread/thread.h glthread/thread.c time.c unsetenv.c usleep.c \ wcrtomb.c wctob.c wctomb.c windows-thread.c windows-tls.c \ xmalloc.c xalloc-die.c glthread/yield.h @GL_COND_OBJ_ACCEPT_TRUE@am__objects_1 = accept.$(OBJEXT) @GL_COND_OBJ_BIND_TRUE@am__objects_2 = bind.$(OBJEXT) @GL_COND_OBJ_BTOWC_TRUE@am__objects_3 = btowc.$(OBJEXT) -@GL_COND_OBJ_CLOSE_TRUE@am__objects_4 = close.$(OBJEXT) -@GL_COND_OBJ_CONNECT_TRUE@am__objects_5 = connect.$(OBJEXT) -@GL_COND_OBJ_DUP2_TRUE@am__objects_6 = dup2.$(OBJEXT) -@GL_COND_OBJ_ERROR_TRUE@am__objects_7 = error.$(OBJEXT) -@GL_COND_OBJ_FCNTL_TRUE@am__objects_8 = fcntl.$(OBJEXT) -@GL_COND_OBJ_FDOPEN_TRUE@am__objects_9 = fdopen.$(OBJEXT) -@GL_COND_OBJ_FSTAT_TRUE@am__objects_10 = fstat.$(OBJEXT) -@GL_COND_OBJ_FTRUNCATE_TRUE@am__objects_11 = ftruncate.$(OBJEXT) -@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__objects_12 = getcwd-lgpl.$(OBJEXT) -@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__objects_13 = \ +@GL_COND_OBJ_C32RTOMB_TRUE@am__objects_4 = c32rtomb.$(OBJEXT) +@GL_COND_OBJ_CLOSE_TRUE@am__objects_5 = close.$(OBJEXT) +@GL_COND_OBJ_CONNECT_TRUE@am__objects_6 = connect.$(OBJEXT) +@GL_COND_OBJ_DUP2_TRUE@am__objects_7 = dup2.$(OBJEXT) +@GL_COND_OBJ_ERROR_TRUE@am__objects_8 = error.$(OBJEXT) +@GL_COND_OBJ_FCNTL_TRUE@am__objects_9 = fcntl.$(OBJEXT) +@GL_COND_OBJ_FDOPEN_TRUE@am__objects_10 = fdopen.$(OBJEXT) +@GL_COND_OBJ_FSTAT_TRUE@am__objects_11 = fstat.$(OBJEXT) +@GL_COND_OBJ_FTRUNCATE_TRUE@am__objects_12 = ftruncate.$(OBJEXT) +@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__objects_13 = getcwd-lgpl.$(OBJEXT) +@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__objects_14 = \ @GL_COND_OBJ_GETDTABLESIZE_TRUE@ getdtablesize.$(OBJEXT) -@GL_COND_OBJ_GETPAGESIZE_TRUE@am__objects_14 = getpagesize.$(OBJEXT) -@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__objects_15 = \ +@GL_COND_OBJ_GETPAGESIZE_TRUE@am__objects_15 = getpagesize.$(OBJEXT) +@GL_COND_OBJ_GETPROGNAME_TRUE@am__objects_16 = getprogname.$(OBJEXT) +@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__objects_17 = \ @GL_COND_OBJ_GETTIMEOFDAY_TRUE@ gettimeofday.$(OBJEXT) -@GL_COND_OBJ_INET_PTON_TRUE@am__objects_16 = inet_pton.$(OBJEXT) -@GL_COND_OBJ_IOCTL_TRUE@am__objects_17 = ioctl.$(OBJEXT) -@GL_COND_OBJ_ISBLANK_TRUE@am__objects_18 = isblank.$(OBJEXT) -@GL_COND_OBJ_LISTEN_TRUE@am__objects_19 = listen.$(OBJEXT) -@GL_COND_OBJ_LSTAT_TRUE@am__objects_20 = lstat.$(OBJEXT) -@GL_COND_OBJ_MBTOWC_TRUE@am__objects_21 = mbtowc.$(OBJEXT) -@GL_COND_OBJ_MSVC_INVAL_TRUE@am__objects_22 = msvc-inval.$(OBJEXT) -@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__objects_23 = \ +@GL_COND_OBJ_INET_PTON_TRUE@am__objects_18 = inet_pton.$(OBJEXT) +@GL_COND_OBJ_IOCTL_TRUE@am__objects_19 = ioctl.$(OBJEXT) +@GL_COND_OBJ_ISBLANK_TRUE@am__objects_20 = isblank.$(OBJEXT) +@GL_COND_OBJ_LISTEN_TRUE@am__objects_21 = listen.$(OBJEXT) +@GL_COND_OBJ_LSTAT_TRUE@am__objects_22 = lstat.$(OBJEXT) +@GL_COND_OBJ_MBTOWC_TRUE@am__objects_23 = mbtowc.$(OBJEXT) +@GL_COND_OBJ_MSVC_INVAL_TRUE@am__objects_24 = msvc-inval.$(OBJEXT) +@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__objects_25 = \ @GL_COND_OBJ_MSVC_NOTHROW_TRUE@ msvc-nothrow.$(OBJEXT) -@GL_COND_OBJ_NANOSLEEP_TRUE@am__objects_24 = nanosleep.$(OBJEXT) -@GL_COND_OBJ_OPEN_TRUE@am__objects_25 = open.$(OBJEXT) -@GL_COND_OBJ_PERROR_TRUE@am__objects_26 = perror.$(OBJEXT) -@GL_COND_OBJ_PIPE_TRUE@am__objects_27 = pipe.$(OBJEXT) -@GL_COND_OBJ_PSELECT_TRUE@am__objects_28 = pselect.$(OBJEXT) -@GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__objects_29 = \ +@GL_COND_OBJ_NANOSLEEP_TRUE@am__objects_26 = nanosleep.$(OBJEXT) +@GL_COND_OBJ_OPEN_TRUE@am__objects_27 = open.$(OBJEXT) +@GL_COND_OBJ_PERROR_TRUE@am__objects_28 = perror.$(OBJEXT) +@GL_COND_OBJ_PIPE_TRUE@am__objects_29 = pipe.$(OBJEXT) +@GL_COND_OBJ_PSELECT_TRUE@am__objects_30 = pselect.$(OBJEXT) +@GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__objects_31 = \ @GL_COND_OBJ_PTHREAD_THREAD_TRUE@ pthread-thread.$(OBJEXT) -@GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__objects_30 = \ +@GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__objects_32 = \ @GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@ pthread_sigmask.$(OBJEXT) -@GL_COND_OBJ_PUTENV_TRUE@am__objects_31 = putenv.$(OBJEXT) -@GL_COND_OBJ_RAISE_TRUE@am__objects_32 = raise.$(OBJEXT) -@GL_COND_OBJ_REALLOCARRAY_TRUE@am__objects_33 = \ +@GL_COND_OBJ_PUTENV_TRUE@am__objects_33 = putenv.$(OBJEXT) +@GL_COND_OBJ_RAISE_TRUE@am__objects_34 = raise.$(OBJEXT) +@GL_COND_OBJ_RANDOM_TRUE@am__objects_35 = random.$(OBJEXT) +@GL_COND_OBJ_RANDOM_R_TRUE@am__objects_36 = random_r.$(OBJEXT) +@GL_COND_OBJ_REALLOCARRAY_TRUE@am__objects_37 = \ @GL_COND_OBJ_REALLOCARRAY_TRUE@ reallocarray.$(OBJEXT) -@GL_COND_OBJ_SCHED_YIELD_TRUE@am__objects_34 = sched_yield.$(OBJEXT) -@GL_COND_OBJ_SELECT_TRUE@am__objects_35 = select.$(OBJEXT) -@GL_COND_OBJ_SETENV_TRUE@am__objects_36 = setenv.$(OBJEXT) -@GL_COND_OBJ_SETLOCALE_TRUE@am__objects_37 = setlocale.$(OBJEXT) -@GL_COND_OBJ_SETSOCKOPT_TRUE@am__objects_38 = setsockopt.$(OBJEXT) -@GL_COND_OBJ_SIGPROCMASK_TRUE@am__objects_39 = sigprocmask.$(OBJEXT) -@GL_COND_OBJ_SLEEP_TRUE@am__objects_40 = sleep.$(OBJEXT) -@GL_COND_OBJ_SOCKET_TRUE@am__objects_41 = socket.$(OBJEXT) -@GL_COND_OBJ_STAT_TRUE@am__objects_42 = stat.$(OBJEXT) -@GL_COND_OBJ_STDIO_READ_TRUE@am__objects_43 = stdio-read.$(OBJEXT) -@GL_COND_OBJ_STDIO_WRITE_TRUE@am__objects_44 = stdio-write.$(OBJEXT) -@GL_COND_OBJ_STRERROR_TRUE@am__objects_45 = strerror.$(OBJEXT) -@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__objects_46 = strerror-override.$(OBJEXT) -@GL_COND_OBJ_SYMLINK_TRUE@am__objects_47 = symlink.$(OBJEXT) +@GL_COND_OBJ_SCHED_YIELD_TRUE@am__objects_38 = sched_yield.$(OBJEXT) +@GL_COND_OBJ_SELECT_TRUE@am__objects_39 = select.$(OBJEXT) +@GL_COND_OBJ_SETENV_TRUE@am__objects_40 = setenv.$(OBJEXT) +@GL_COND_OBJ_SETLOCALE_TRUE@am__objects_41 = setlocale.$(OBJEXT) +@GL_COND_OBJ_SETSOCKOPT_TRUE@am__objects_42 = setsockopt.$(OBJEXT) +@GL_COND_OBJ_SIGPROCMASK_TRUE@am__objects_43 = sigprocmask.$(OBJEXT) +@GL_COND_OBJ_SLEEP_TRUE@am__objects_44 = sleep.$(OBJEXT) +@GL_COND_OBJ_SOCKET_TRUE@am__objects_45 = socket.$(OBJEXT) +@GL_COND_OBJ_STAT_TRUE@am__objects_46 = stat.$(OBJEXT) +@GL_COND_OBJ_STDIO_READ_TRUE@am__objects_47 = stdio-read.$(OBJEXT) +@GL_COND_OBJ_STDIO_WRITE_TRUE@am__objects_48 = stdio-write.$(OBJEXT) +@GL_COND_OBJ_STRERROR_TRUE@am__objects_49 = strerror.$(OBJEXT) +@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__objects_50 = strerror-override.$(OBJEXT) +@GL_COND_OBJ_SYMLINK_TRUE@am__objects_51 = symlink.$(OBJEXT) am__dirstamp = $(am__leading_dot)dirstamp -@GL_COND_OBJ_UNSETENV_TRUE@am__objects_48 = unsetenv.$(OBJEXT) -@GL_COND_OBJ_USLEEP_TRUE@am__objects_49 = usleep.$(OBJEXT) -@GL_COND_OBJ_WCRTOMB_TRUE@am__objects_50 = wcrtomb.$(OBJEXT) -@GL_COND_OBJ_WCTOB_TRUE@am__objects_51 = wctob.$(OBJEXT) -@GL_COND_OBJ_WCTOMB_TRUE@am__objects_52 = wctomb.$(OBJEXT) -@GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__objects_53 = \ +@GL_COND_OBJ_TIME_TRUE@am__objects_52 = time.$(OBJEXT) +@GL_COND_OBJ_UNSETENV_TRUE@am__objects_53 = unsetenv.$(OBJEXT) +@GL_COND_OBJ_USLEEP_TRUE@am__objects_54 = usleep.$(OBJEXT) +@GL_COND_OBJ_WCRTOMB_TRUE@am__objects_55 = wcrtomb.$(OBJEXT) +@GL_COND_OBJ_WCTOB_TRUE@am__objects_56 = wctob.$(OBJEXT) +@GL_COND_OBJ_WCTOMB_TRUE@am__objects_57 = wctomb.$(OBJEXT) +@GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__objects_58 = \ @GL_COND_OBJ_WINDOWS_THREAD_TRUE@ windows-thread.$(OBJEXT) -@GL_COND_OBJ_WINDOWS_TLS_TRUE@am__objects_54 = windows-tls.$(OBJEXT) +@GL_COND_OBJ_WINDOWS_TLS_TRUE@am__objects_59 = windows-tls.$(OBJEXT) am_libtests_a_OBJECTS = $(am__objects_1) basename-lgpl.$(OBJEXT) \ - binary-io.$(OBJEXT) $(am__objects_2) $(am__objects_3) \ - cloexec.$(OBJEXT) $(am__objects_4) $(am__objects_5) \ - $(am__objects_6) $(am__objects_7) exitfail.$(OBJEXT) \ - $(am__objects_8) fd-hook.$(OBJEXT) $(am__objects_9) \ - $(am__objects_10) $(am__objects_11) $(am__objects_12) \ - $(am__objects_13) $(am__objects_14) getprogname.$(OBJEXT) \ - $(am__objects_15) ialloc.$(OBJEXT) $(am__objects_16) \ - $(am__objects_17) $(am__objects_18) $(am__objects_19) \ - $(am__objects_20) $(am__objects_21) $(am__objects_22) \ - $(am__objects_23) $(am__objects_24) $(am__objects_25) \ - $(am__objects_26) $(am__objects_27) $(am__objects_28) \ - $(am__objects_29) $(am__objects_30) $(am__objects_31) \ - $(am__objects_32) $(am__objects_33) $(am__objects_34) \ - $(am__objects_35) $(am__objects_36) $(am__objects_37) \ - $(am__objects_38) $(am__objects_39) $(am__objects_40) \ - $(am__objects_41) sockets.$(OBJEXT) $(am__objects_42) \ - stat-time.$(OBJEXT) $(am__objects_43) $(am__objects_44) \ - $(am__objects_45) $(am__objects_46) $(am__objects_47) \ + binary-io.$(OBJEXT) $(am__objects_2) btoc32.$(OBJEXT) \ + $(am__objects_3) $(am__objects_4) c32tob.$(OBJEXT) \ + cloexec.$(OBJEXT) $(am__objects_5) $(am__objects_6) \ + $(am__objects_7) $(am__objects_8) exitfail.$(OBJEXT) \ + $(am__objects_9) fd-hook.$(OBJEXT) $(am__objects_10) \ + $(am__objects_11) $(am__objects_12) $(am__objects_13) \ + $(am__objects_14) $(am__objects_15) $(am__objects_16) \ + $(am__objects_17) ialloc.$(OBJEXT) $(am__objects_18) \ + $(am__objects_19) $(am__objects_20) $(am__objects_21) \ + $(am__objects_22) $(am__objects_23) $(am__objects_24) \ + $(am__objects_25) $(am__objects_26) $(am__objects_27) \ + $(am__objects_28) $(am__objects_29) $(am__objects_30) \ + $(am__objects_31) $(am__objects_32) $(am__objects_33) \ + $(am__objects_34) $(am__objects_35) $(am__objects_36) \ + $(am__objects_37) same-inode.$(OBJEXT) $(am__objects_38) \ + $(am__objects_39) $(am__objects_40) $(am__objects_41) \ + $(am__objects_42) $(am__objects_43) $(am__objects_44) \ + $(am__objects_45) sockets.$(OBJEXT) $(am__objects_46) \ + stat-time.$(OBJEXT) $(am__objects_47) $(am__objects_48) \ + $(am__objects_49) $(am__objects_50) $(am__objects_51) \ sys_socket.$(OBJEXT) glthread/thread.$(OBJEXT) \ - $(am__objects_48) $(am__objects_49) $(am__objects_50) \ - $(am__objects_51) $(am__objects_52) $(am__objects_53) \ - $(am__objects_54) xmalloc.$(OBJEXT) xalloc-die.$(OBJEXT) + $(am__objects_52) $(am__objects_53) $(am__objects_54) \ + $(am__objects_55) $(am__objects_56) $(am__objects_57) \ + $(am__objects_58) $(am__objects_59) xmalloc.$(OBJEXT) \ + xalloc-die.$(OBJEXT) libtests_a_OBJECTS = $(am_libtests_a_OBJECTS) am_current_locale_OBJECTS = locale.$(OBJEXT) current_locale_OBJECTS = $(am_current_locale_OBJECTS) @@ -1135,6 +1212,12 @@ test_accept_OBJECTS = test-accept.$(OBJEXT) am__DEPENDENCIES_2 = libtests.a ../lib/libunistring.la libtests.a \ ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) test_accept_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_alignasof_SOURCES = test-alignasof.c +test_alignasof_OBJECTS = test-alignasof.$(OBJEXT) +test_alignasof_LDADD = $(LDADD) +test_alignasof_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) test_alloca_opt_SOURCES = test-alloca-opt.c test_alloca_opt_OBJECTS = test-alloca-opt.$(OBJEXT) test_alloca_opt_LDADD = $(LDADD) @@ -1192,6 +1275,9 @@ test_block_of_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_block_test_OBJECTS = unictype/test-block_test.$(OBJEXT) test_block_test_OBJECTS = $(am_test_block_test_OBJECTS) test_block_test_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_btoc32_SOURCES = test-btoc32.c +test_btoc32_OBJECTS = test-btoc32.$(OBJEXT) +test_btoc32_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_btowc_SOURCES = test-btowc.c test_btowc_OBJECTS = test-btowc.$(OBJEXT) test_btowc_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) @@ -1207,6 +1293,72 @@ test_c_strncasecmp_SOURCES = test-c-strncasecmp.c test_c_strncasecmp_OBJECTS = test-c-strncasecmp.$(OBJEXT) test_c_strncasecmp_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) +test_c32isalnum_SOURCES = test-c32isalnum.c +test_c32isalnum_OBJECTS = test-c32isalnum.$(OBJEXT) +test_c32isalnum_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isalpha_SOURCES = test-c32isalpha.c +test_c32isalpha_OBJECTS = test-c32isalpha.$(OBJEXT) +test_c32isalpha_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isblank_SOURCES = test-c32isblank.c +test_c32isblank_OBJECTS = test-c32isblank.$(OBJEXT) +test_c32isblank_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32iscntrl_SOURCES = test-c32iscntrl.c +test_c32iscntrl_OBJECTS = test-c32iscntrl.$(OBJEXT) +test_c32iscntrl_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isdigit_SOURCES = test-c32isdigit.c +test_c32isdigit_OBJECTS = test-c32isdigit.$(OBJEXT) +test_c32isdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isgraph_SOURCES = test-c32isgraph.c +test_c32isgraph_OBJECTS = test-c32isgraph.$(OBJEXT) +test_c32isgraph_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32islower_SOURCES = test-c32islower.c +test_c32islower_OBJECTS = test-c32islower.$(OBJEXT) +test_c32islower_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isprint_SOURCES = test-c32isprint.c +test_c32isprint_OBJECTS = test-c32isprint.$(OBJEXT) +test_c32isprint_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32ispunct_SOURCES = test-c32ispunct.c +test_c32ispunct_OBJECTS = test-c32ispunct.$(OBJEXT) +test_c32ispunct_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isspace_SOURCES = test-c32isspace.c +test_c32isspace_OBJECTS = test-c32isspace.$(OBJEXT) +test_c32isspace_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isupper_SOURCES = test-c32isupper.c +test_c32isupper_OBJECTS = test-c32isupper.$(OBJEXT) +test_c32isupper_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isxdigit_SOURCES = test-c32isxdigit.c +test_c32isxdigit_OBJECTS = test-c32isxdigit.$(OBJEXT) +test_c32isxdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32rtomb_SOURCES = test-c32rtomb.c +test_c32rtomb_OBJECTS = test-c32rtomb.$(OBJEXT) +test_c32rtomb_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) +test_c32rtomb_w32_SOURCES = test-c32rtomb-w32.c +test_c32rtomb_w32_OBJECTS = test-c32rtomb-w32.$(OBJEXT) +test_c32rtomb_w32_LDADD = $(LDADD) +test_c32rtomb_w32_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +test_c32tolower_SOURCES = test-c32tolower.c +test_c32tolower_OBJECTS = test-c32tolower.$(OBJEXT) +test_c32tolower_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32width_SOURCES = test-c32width.c +test_c32width_OBJECTS = test-c32width.$(OBJEXT) +test_c32width_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) test_calloc_gnu_SOURCES = test-calloc-gnu.c test_calloc_gnu_OBJECTS = test-calloc-gnu.$(OBJEXT) test_calloc_gnu_LDADD = $(LDADD) @@ -1479,6 +1631,9 @@ test_errno_OBJECTS = test-errno.$(OBJEXT) test_errno_LDADD = $(LDADD) test_errno_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +test_error_SOURCES = test-error.c +test_error_OBJECTS = test-error.$(OBJEXT) +test_error_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_fcntl_SOURCES = test-fcntl.c test_fcntl_OBJECTS = test-fcntl.$(OBJEXT) test_fcntl_LDADD = $(LDADD) @@ -1598,6 +1753,15 @@ test_ignore_value_LDADD = $(LDADD) test_ignore_value_DEPENDENCIES = libtests.a ../lib/libunistring.la \ libtests.a ../lib/libunistring.la libtests.a \ $(am__DEPENDENCIES_1) +am_test_incb_byname_OBJECTS = unictype/test-incb_byname.$(OBJEXT) +test_incb_byname_OBJECTS = $(am_test_incb_byname_OBJECTS) +test_incb_byname_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_incb_name_OBJECTS = unictype/test-incb_name.$(OBJEXT) +test_incb_name_OBJECTS = $(am_test_incb_name_OBJECTS) +test_incb_name_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_incb_of_OBJECTS = unictype/test-incb_of.$(OBJEXT) +test_incb_of_OBJECTS = $(am_test_incb_of_OBJECTS) +test_incb_of_DEPENDENCIES = $(am__DEPENDENCIES_2) test_inet_pton_SOURCES = test-inet_pton.c test_inet_pton_OBJECTS = test-inet_pton.$(OBJEXT) test_inet_pton_DEPENDENCIES = $(am__DEPENDENCIES_2) @@ -1652,6 +1816,10 @@ test_iswdigit_SOURCES = test-iswdigit.c test_iswdigit_OBJECTS = test-iswdigit.$(OBJEXT) test_iswdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_iswpunct_SOURCES = test-iswpunct.c +test_iswpunct_OBJECTS = test-iswpunct.$(OBJEXT) +test_iswpunct_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_iswxdigit_SOURCES = test-iswxdigit.c test_iswxdigit_OBJECTS = test-iswxdigit.$(OBJEXT) test_iswxdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ @@ -1693,6 +1861,12 @@ test_langinfo_LDADD = $(LDADD) test_langinfo_DEPENDENCIES = libtests.a ../lib/libunistring.la \ libtests.a ../lib/libunistring.la libtests.a \ $(am__DEPENDENCIES_1) +test_largefile_SOURCES = test-largefile.c +test_largefile_OBJECTS = test-largefile.$(OBJEXT) +test_largefile_LDADD = $(LDADD) +test_largefile_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) test_limits_h_SOURCES = test-limits-h.c test_limits_h_OBJECTS = test-limits-h.$(OBJEXT) test_limits_h_LDADD = $(LDADD) @@ -1746,6 +1920,16 @@ test_math_OBJECTS = test-math.$(OBJEXT) test_math_LDADD = $(LDADD) test_math_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +test_mbrtoc32_SOURCES = test-mbrtoc32.c +test_mbrtoc32_OBJECTS = test-mbrtoc32.$(OBJEXT) +test_mbrtoc32_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_mbrtoc32_w32_SOURCES = test-mbrtoc32-w32.c +test_mbrtoc32_w32_OBJECTS = test-mbrtoc32-w32.$(OBJEXT) +test_mbrtoc32_w32_LDADD = $(LDADD) +test_mbrtoc32_w32_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) test_mbrtowc_SOURCES = test-mbrtowc.c test_mbrtowc_OBJECTS = test-mbrtowc.$(OBJEXT) test_mbrtowc_DEPENDENCIES = $(am__DEPENDENCIES_2) \ @@ -2047,6 +2231,16 @@ test_pr_hex_digit_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_pr_hyphen_OBJECTS = unictype/test-pr_hyphen.$(OBJEXT) test_pr_hyphen_OBJECTS = $(am_test_pr_hyphen_OBJECTS) test_pr_hyphen_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_pr_id_compat_math_continue_OBJECTS = \ + unictype/test-pr_id_compat_math_continue.$(OBJEXT) +test_pr_id_compat_math_continue_OBJECTS = \ + $(am_test_pr_id_compat_math_continue_OBJECTS) +test_pr_id_compat_math_continue_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_pr_id_compat_math_start_OBJECTS = \ + unictype/test-pr_id_compat_math_start.$(OBJEXT) +test_pr_id_compat_math_start_OBJECTS = \ + $(am_test_pr_id_compat_math_start_OBJECTS) +test_pr_id_compat_math_start_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_pr_id_continue_OBJECTS = \ unictype/test-pr_id_continue.$(OBJEXT) test_pr_id_continue_OBJECTS = $(am_test_pr_id_continue_OBJECTS) @@ -2068,6 +2262,11 @@ am_test_pr_ids_trinary_operator_OBJECTS = \ test_pr_ids_trinary_operator_OBJECTS = \ $(am_test_pr_ids_trinary_operator_OBJECTS) test_pr_ids_trinary_operator_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_pr_ids_unary_operator_OBJECTS = \ + unictype/test-pr_ids_unary_operator.$(OBJEXT) +test_pr_ids_unary_operator_OBJECTS = \ + $(am_test_pr_ids_unary_operator_OBJECTS) +test_pr_ids_unary_operator_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_pr_ignorable_control_OBJECTS = \ unictype/test-pr_ignorable_control.$(OBJEXT) test_pr_ignorable_control_OBJECTS = \ @@ -2168,6 +2367,12 @@ am_test_pr_pattern_white_space_OBJECTS = \ test_pr_pattern_white_space_OBJECTS = \ $(am_test_pr_pattern_white_space_OBJECTS) test_pr_pattern_white_space_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_pr_prepended_concatenation_mark_OBJECTS = \ + unictype/test-pr_prepended_concatenation_mark.$(OBJEXT) +test_pr_prepended_concatenation_mark_OBJECTS = \ + $(am_test_pr_prepended_concatenation_mark_OBJECTS) +test_pr_prepended_concatenation_mark_DEPENDENCIES = \ + $(am__DEPENDENCIES_2) am_test_pr_private_use_OBJECTS = \ unictype/test-pr_private_use.$(OBJEXT) test_pr_private_use_OBJECTS = $(am_test_pr_private_use_OBJECTS) @@ -2279,6 +2484,23 @@ test_raise_OBJECTS = test-raise.$(OBJEXT) test_raise_LDADD = $(LDADD) test_raise_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +test_random_SOURCES = test-random.c +test_random_OBJECTS = test-random.$(OBJEXT) +test_random_LDADD = $(LDADD) +test_random_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +test_random_mt_SOURCES = test-random-mt.c +test_random_mt_OBJECTS = test-random-mt.$(OBJEXT) +test_random_mt_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +test_random_r_SOURCES = test-random_r.c +test_random_r_OBJECTS = test-random_r.$(OBJEXT) +test_random_r_LDADD = $(LDADD) +test_random_r_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) test_realloc_gnu_SOURCES = test-realloc-gnu.c test_realloc_gnu_OBJECTS = test-realloc-gnu.$(OBJEXT) test_realloc_gnu_LDADD = $(LDADD) @@ -2336,6 +2558,13 @@ test_setlocale_null_mt_one_OBJECTS = \ test-setlocale_null-mt-one.$(OBJEXT) test_setlocale_null_mt_one_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_setlocale_null_unlocked_SOURCES = test-setlocale_null-unlocked.c +test_setlocale_null_unlocked_OBJECTS = \ + test-setlocale_null-unlocked.$(OBJEXT) +test_setlocale_null_unlocked_LDADD = $(LDADD) +test_setlocale_null_unlocked_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) test_setsockopt_SOURCES = test-setsockopt.c test_setsockopt_OBJECTS = test-setsockopt.$(OBJEXT) test_setsockopt_DEPENDENCIES = $(am__DEPENDENCIES_2) @@ -2372,12 +2601,6 @@ test_stat_time_SOURCES = test-stat-time.c test_stat_time_OBJECTS = test-stat-time.$(OBJEXT) test_stat_time_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) -test_stdalign_SOURCES = test-stdalign.c -test_stdalign_OBJECTS = test-stdalign.$(OBJEXT) -test_stdalign_LDADD = $(LDADD) -test_stdalign_DEPENDENCIES = libtests.a ../lib/libunistring.la \ - libtests.a ../lib/libunistring.la libtests.a \ - $(am__DEPENDENCIES_1) test_stdbool_SOURCES = test-stdbool.c test_stdbool_OBJECTS = test-stdbool.$(OBJEXT) test_stdbool_LDADD = $(LDADD) @@ -2524,6 +2747,15 @@ test_time_OBJECTS = test-time.$(OBJEXT) test_time_LDADD = $(LDADD) test_time_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +test_time_h_SOURCES = test-time-h.c +test_time_h_OBJECTS = test-time-h.$(OBJEXT) +test_time_h_LDADD = $(LDADD) +test_time_h_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +am_test_u_version_OBJECTS = unimetadata/test-u-version.$(OBJEXT) +test_u_version_OBJECTS = $(am_test_u_version_OBJECTS) +test_u_version_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_u16_asnprintf1_OBJECTS = \ unistdio/test-u16-asnprintf1.$(OBJEXT) test_u16_asnprintf1_OBJECTS = $(am_test_u16_asnprintf1_OBJECTS) @@ -2624,6 +2856,9 @@ test_u16_normcmp_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_u16_normcoll_OBJECTS = uninorm/test-u16-normcoll.$(OBJEXT) test_u16_normcoll_OBJECTS = $(am_test_u16_normcoll_OBJECTS) test_u16_normcoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_pcpy_OBJECTS = unistr/test-u16-pcpy.$(OBJEXT) +test_u16_pcpy_OBJECTS = $(am_test_u16_pcpy_OBJECTS) +test_u16_pcpy_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_u16_possible_linebreaks_OBJECTS = \ unilbrk/test-u16-possible-linebreaks.$(OBJEXT) test_u16_possible_linebreaks_OBJECTS = \ @@ -2871,6 +3106,9 @@ test_u32_normcmp_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_u32_normcoll_OBJECTS = uninorm/test-u32-normcoll.$(OBJEXT) test_u32_normcoll_OBJECTS = $(am_test_u32_normcoll_OBJECTS) test_u32_normcoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_pcpy_OBJECTS = unistr/test-u32-pcpy.$(OBJEXT) +test_u32_pcpy_OBJECTS = $(am_test_u32_pcpy_OBJECTS) +test_u32_pcpy_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_u32_possible_linebreaks_OBJECTS = \ unilbrk/test-u32-possible-linebreaks.$(OBJEXT) test_u32_possible_linebreaks_OBJECTS = \ @@ -3100,6 +3338,9 @@ test_u8_normcmp_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_u8_normcoll_OBJECTS = uninorm/test-u8-normcoll.$(OBJEXT) test_u8_normcoll_OBJECTS = $(am_test_u8_normcoll_OBJECTS) test_u8_normcoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_pcpy_OBJECTS = unistr/test-u8-pcpy.$(OBJEXT) +test_u8_pcpy_OBJECTS = $(am_test_u8_pcpy_OBJECTS) +test_u8_pcpy_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_u8_possible_linebreaks_OBJECTS = \ unilbrk/test-u8-possible-linebreaks.$(OBJEXT) test_u8_possible_linebreaks_OBJECTS = \ @@ -3258,6 +3499,11 @@ test_uc_width_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_uc_width2_OBJECTS = uniwidth/test-uc_width2.$(OBJEXT) test_uc_width2_OBJECTS = $(am_test_uc_width2_OBJECTS) test_uc_width2_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_uchar_SOURCES = test-uchar.c +test_uchar_OBJECTS = test-uchar.$(OBJEXT) +test_uchar_LDADD = $(LDADD) +test_uchar_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) am_test_ulc_asnprintf1_OBJECTS = \ unistdio/test-ulc-asnprintf1.$(OBJEXT) test_ulc_asnprintf1_OBJECTS = $(am_test_ulc_asnprintf1_OBJECTS) @@ -3404,56 +3650,67 @@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ ./$(DEPDIR)/basename-lgpl.Po ./$(DEPDIR)/binary-io.Po \ - ./$(DEPDIR)/bind.Po ./$(DEPDIR)/btowc.Po ./$(DEPDIR)/calloc.Po \ - ./$(DEPDIR)/cloexec.Po ./$(DEPDIR)/close.Po \ - ./$(DEPDIR)/connect.Po ./$(DEPDIR)/dup2.Po \ - ./$(DEPDIR)/error.Po ./$(DEPDIR)/exitfail.Po \ - ./$(DEPDIR)/fcntl.Po ./$(DEPDIR)/fd-hook.Po \ - ./$(DEPDIR)/fdopen.Po ./$(DEPDIR)/fstat.Po \ - ./$(DEPDIR)/ftruncate.Po ./$(DEPDIR)/getcwd-lgpl.Po \ - ./$(DEPDIR)/getdtablesize.Po ./$(DEPDIR)/getpagesize.Po \ - ./$(DEPDIR)/getprogname.Po ./$(DEPDIR)/gettimeofday.Po \ - ./$(DEPDIR)/ialloc.Po ./$(DEPDIR)/iconvsupport.Po \ - ./$(DEPDIR)/inet_pton.Po ./$(DEPDIR)/ioctl.Po \ - ./$(DEPDIR)/isblank.Po ./$(DEPDIR)/listen.Po \ - ./$(DEPDIR)/locale.Po ./$(DEPDIR)/lstat.Po \ - ./$(DEPDIR)/malloc.Po ./$(DEPDIR)/mbtowc.Po \ - ./$(DEPDIR)/msvc-inval.Po ./$(DEPDIR)/msvc-nothrow.Po \ - ./$(DEPDIR)/nanosleep.Po ./$(DEPDIR)/open.Po \ - ./$(DEPDIR)/perror.Po ./$(DEPDIR)/pipe.Po \ + ./$(DEPDIR)/bind.Po ./$(DEPDIR)/btoc32.Po ./$(DEPDIR)/btowc.Po \ + ./$(DEPDIR)/c32rtomb.Po ./$(DEPDIR)/c32tob.Po \ + ./$(DEPDIR)/calloc.Po ./$(DEPDIR)/cloexec.Po \ + ./$(DEPDIR)/close.Po ./$(DEPDIR)/connect.Po \ + ./$(DEPDIR)/dup2.Po ./$(DEPDIR)/error.Po \ + ./$(DEPDIR)/exitfail.Po ./$(DEPDIR)/fcntl.Po \ + ./$(DEPDIR)/fd-hook.Po ./$(DEPDIR)/fdopen.Po \ + ./$(DEPDIR)/fstat.Po ./$(DEPDIR)/ftruncate.Po \ + ./$(DEPDIR)/getcwd-lgpl.Po ./$(DEPDIR)/getdtablesize.Po \ + ./$(DEPDIR)/getpagesize.Po ./$(DEPDIR)/getprogname.Po \ + ./$(DEPDIR)/gettimeofday.Po ./$(DEPDIR)/ialloc.Po \ + ./$(DEPDIR)/iconvsupport.Po ./$(DEPDIR)/inet_pton.Po \ + ./$(DEPDIR)/ioctl.Po ./$(DEPDIR)/isblank.Po \ + ./$(DEPDIR)/listen.Po ./$(DEPDIR)/locale.Po \ + ./$(DEPDIR)/lstat.Po ./$(DEPDIR)/malloc.Po \ + ./$(DEPDIR)/mbtowc.Po ./$(DEPDIR)/msvc-inval.Po \ + ./$(DEPDIR)/msvc-nothrow.Po ./$(DEPDIR)/nanosleep.Po \ + ./$(DEPDIR)/open.Po ./$(DEPDIR)/perror.Po ./$(DEPDIR)/pipe.Po \ ./$(DEPDIR)/pselect.Po ./$(DEPDIR)/pthread-thread.Po \ ./$(DEPDIR)/pthread_sigmask.Po ./$(DEPDIR)/putenv.Po \ - ./$(DEPDIR)/raise.Po ./$(DEPDIR)/randomd.Po \ + ./$(DEPDIR)/raise.Po ./$(DEPDIR)/random.Po \ + ./$(DEPDIR)/random_r.Po ./$(DEPDIR)/randomd.Po \ ./$(DEPDIR)/randoml.Po ./$(DEPDIR)/realloc.Po \ - ./$(DEPDIR)/reallocarray.Po ./$(DEPDIR)/sched_yield.Po \ - ./$(DEPDIR)/select.Po ./$(DEPDIR)/setenv.Po \ - ./$(DEPDIR)/setlocale.Po ./$(DEPDIR)/setsockopt.Po \ - ./$(DEPDIR)/sigprocmask.Po ./$(DEPDIR)/sleep.Po \ - ./$(DEPDIR)/socket.Po ./$(DEPDIR)/sockets.Po \ - ./$(DEPDIR)/stat-time.Po ./$(DEPDIR)/stat-w32.Po \ - ./$(DEPDIR)/stat.Po ./$(DEPDIR)/stdio-read.Po \ - ./$(DEPDIR)/stdio-write.Po ./$(DEPDIR)/strerror-override.Po \ - ./$(DEPDIR)/strerror.Po ./$(DEPDIR)/strerror_r.Po \ - ./$(DEPDIR)/symlink.Po ./$(DEPDIR)/sys_socket.Po \ - ./$(DEPDIR)/test-accept.Po ./$(DEPDIR)/test-alloca-opt.Po \ + ./$(DEPDIR)/reallocarray.Po ./$(DEPDIR)/same-inode.Po \ + ./$(DEPDIR)/sched_yield.Po ./$(DEPDIR)/select.Po \ + ./$(DEPDIR)/setenv.Po ./$(DEPDIR)/setlocale.Po \ + ./$(DEPDIR)/setsockopt.Po ./$(DEPDIR)/sigprocmask.Po \ + ./$(DEPDIR)/sleep.Po ./$(DEPDIR)/socket.Po \ + ./$(DEPDIR)/sockets.Po ./$(DEPDIR)/stat-time.Po \ + ./$(DEPDIR)/stat-w32.Po ./$(DEPDIR)/stat.Po \ + ./$(DEPDIR)/stdio-read.Po ./$(DEPDIR)/stdio-write.Po \ + ./$(DEPDIR)/strerror-override.Po ./$(DEPDIR)/strerror.Po \ + ./$(DEPDIR)/strerror_r.Po ./$(DEPDIR)/symlink.Po \ + ./$(DEPDIR)/sys_socket.Po ./$(DEPDIR)/test-accept.Po \ + ./$(DEPDIR)/test-alignasof.Po ./$(DEPDIR)/test-alloca-opt.Po \ ./$(DEPDIR)/test-arpa_inet.Po \ ./$(DEPDIR)/test-array-mergesort.Po ./$(DEPDIR)/test-assert.Po \ ./$(DEPDIR)/test-binary-io.Po ./$(DEPDIR)/test-bind.Po \ - ./$(DEPDIR)/test-btowc.Po ./$(DEPDIR)/test-c-ctype.Po \ - ./$(DEPDIR)/test-c-strcasecmp.Po \ + ./$(DEPDIR)/test-btoc32.Po ./$(DEPDIR)/test-btowc.Po \ + ./$(DEPDIR)/test-c-ctype.Po ./$(DEPDIR)/test-c-strcasecmp.Po \ ./$(DEPDIR)/test-c-strncasecmp.Po \ + ./$(DEPDIR)/test-c32isalnum.Po ./$(DEPDIR)/test-c32isalpha.Po \ + ./$(DEPDIR)/test-c32isblank.Po ./$(DEPDIR)/test-c32iscntrl.Po \ + ./$(DEPDIR)/test-c32isdigit.Po ./$(DEPDIR)/test-c32isgraph.Po \ + ./$(DEPDIR)/test-c32islower.Po ./$(DEPDIR)/test-c32isprint.Po \ + ./$(DEPDIR)/test-c32ispunct.Po ./$(DEPDIR)/test-c32isspace.Po \ + ./$(DEPDIR)/test-c32isupper.Po ./$(DEPDIR)/test-c32isxdigit.Po \ + ./$(DEPDIR)/test-c32rtomb-w32.Po ./$(DEPDIR)/test-c32rtomb.Po \ + ./$(DEPDIR)/test-c32tolower.Po ./$(DEPDIR)/test-c32width.Po \ ./$(DEPDIR)/test-calloc-gnu.Po ./$(DEPDIR)/test-cloexec.Po \ ./$(DEPDIR)/test-close.Po ./$(DEPDIR)/test-connect.Po \ ./$(DEPDIR)/test-ctype.Po ./$(DEPDIR)/test-dup2.Po \ ./$(DEPDIR)/test-environ.Po ./$(DEPDIR)/test-errno.Po \ - ./$(DEPDIR)/test-fcntl-h.Po ./$(DEPDIR)/test-fcntl.Po \ - ./$(DEPDIR)/test-fdopen.Po ./$(DEPDIR)/test-fgetc.Po \ - ./$(DEPDIR)/test-float.Po ./$(DEPDIR)/test-fputc.Po \ - ./$(DEPDIR)/test-fread.Po ./$(DEPDIR)/test-free.Po \ - ./$(DEPDIR)/test-frexp.Po ./$(DEPDIR)/test-frexpl.Po \ - ./$(DEPDIR)/test-fseterr.Po ./$(DEPDIR)/test-fstat.Po \ - ./$(DEPDIR)/test-ftruncate.Po ./$(DEPDIR)/test-fwrite.Po \ - ./$(DEPDIR)/test-getcwd-lgpl.Po \ + ./$(DEPDIR)/test-error.Po ./$(DEPDIR)/test-fcntl-h.Po \ + ./$(DEPDIR)/test-fcntl.Po ./$(DEPDIR)/test-fdopen.Po \ + ./$(DEPDIR)/test-fgetc.Po ./$(DEPDIR)/test-float.Po \ + ./$(DEPDIR)/test-fputc.Po ./$(DEPDIR)/test-fread.Po \ + ./$(DEPDIR)/test-free.Po ./$(DEPDIR)/test-frexp.Po \ + ./$(DEPDIR)/test-frexpl.Po ./$(DEPDIR)/test-fseterr.Po \ + ./$(DEPDIR)/test-fstat.Po ./$(DEPDIR)/test-ftruncate.Po \ + ./$(DEPDIR)/test-fwrite.Po ./$(DEPDIR)/test-getcwd-lgpl.Po \ ./$(DEPDIR)/test-getdtablesize.Po \ ./$(DEPDIR)/test-getprogname.Po \ ./$(DEPDIR)/test-gettimeofday.Po \ @@ -3464,13 +3721,15 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ ./$(DEPDIR)/test-isblank.Po ./$(DEPDIR)/test-isnand-nolibm.Po \ ./$(DEPDIR)/test-isnanf-nolibm.Po \ ./$(DEPDIR)/test-isnanl-nolibm.Po ./$(DEPDIR)/test-iswblank.Po \ - ./$(DEPDIR)/test-iswdigit.Po ./$(DEPDIR)/test-iswxdigit.Po \ - ./$(DEPDIR)/test-langinfo.Po ./$(DEPDIR)/test-limits-h.Po \ + ./$(DEPDIR)/test-iswdigit.Po ./$(DEPDIR)/test-iswpunct.Po \ + ./$(DEPDIR)/test-iswxdigit.Po ./$(DEPDIR)/test-langinfo.Po \ + ./$(DEPDIR)/test-largefile.Po ./$(DEPDIR)/test-limits-h.Po \ ./$(DEPDIR)/test-listen.Po ./$(DEPDIR)/test-localcharset.Po \ ./$(DEPDIR)/test-locale.Po ./$(DEPDIR)/test-localename.Po \ ./$(DEPDIR)/test-lock.Po ./$(DEPDIR)/test-lstat.Po \ ./$(DEPDIR)/test-malloc-gnu.Po ./$(DEPDIR)/test-malloca.Po \ - ./$(DEPDIR)/test-math.Po ./$(DEPDIR)/test-mbrtowc-w32.Po \ + ./$(DEPDIR)/test-math.Po ./$(DEPDIR)/test-mbrtoc32-w32.Po \ + ./$(DEPDIR)/test-mbrtoc32.Po ./$(DEPDIR)/test-mbrtowc-w32.Po \ ./$(DEPDIR)/test-mbrtowc.Po ./$(DEPDIR)/test-mbsinit.Po \ ./$(DEPDIR)/test-memchr.Po ./$(DEPDIR)/test-nanosleep.Po \ ./$(DEPDIR)/test-netinet_in.Po ./$(DEPDIR)/test-once.Po \ @@ -3481,7 +3740,8 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ ./$(DEPDIR)/test-pthread-thread.Po ./$(DEPDIR)/test-pthread.Po \ ./$(DEPDIR)/test-pthread_sigmask1.Po \ ./$(DEPDIR)/test-pthread_sigmask2.Po ./$(DEPDIR)/test-raise.Po \ - ./$(DEPDIR)/test-realloc-gnu.Po \ + ./$(DEPDIR)/test-random-mt.Po ./$(DEPDIR)/test-random.Po \ + ./$(DEPDIR)/test-random_r.Po ./$(DEPDIR)/test-realloc-gnu.Po \ ./$(DEPDIR)/test-reallocarray.Po ./$(DEPDIR)/test-rwlock1.Po \ ./$(DEPDIR)/test-sched.Po ./$(DEPDIR)/test-select-fd.Po \ ./$(DEPDIR)/test-select-stdin.Po ./$(DEPDIR)/test-select.Po \ @@ -3489,35 +3749,37 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ ./$(DEPDIR)/test-setlocale2.Po \ ./$(DEPDIR)/test-setlocale_null-mt-all.Po \ ./$(DEPDIR)/test-setlocale_null-mt-one.Po \ + ./$(DEPDIR)/test-setlocale_null-unlocked.Po \ ./$(DEPDIR)/test-setlocale_null.Po \ ./$(DEPDIR)/test-setsockopt.Po ./$(DEPDIR)/test-signal-h.Po \ ./$(DEPDIR)/test-signbit.Po ./$(DEPDIR)/test-sigprocmask.Po \ ./$(DEPDIR)/test-sleep.Po ./$(DEPDIR)/test-sockets.Po \ ./$(DEPDIR)/test-stat-time.Po ./$(DEPDIR)/test-stat.Po \ - ./$(DEPDIR)/test-stdalign.Po ./$(DEPDIR)/test-stdbool.Po \ - ./$(DEPDIR)/test-stdckdint.Po ./$(DEPDIR)/test-stddef.Po \ - ./$(DEPDIR)/test-stdint.Po ./$(DEPDIR)/test-stdio.Po \ - ./$(DEPDIR)/test-stdlib.Po ./$(DEPDIR)/test-strerror.Po \ - ./$(DEPDIR)/test-strerror_r.Po ./$(DEPDIR)/test-striconveh.Po \ - ./$(DEPDIR)/test-striconveha.Po ./$(DEPDIR)/test-string.Po \ - ./$(DEPDIR)/test-strncat.Po ./$(DEPDIR)/test-strstr.Po \ - ./$(DEPDIR)/test-symlink.Po ./$(DEPDIR)/test-sys_ioctl.Po \ - ./$(DEPDIR)/test-sys_select.Po ./$(DEPDIR)/test-sys_socket.Po \ - ./$(DEPDIR)/test-sys_stat.Po ./$(DEPDIR)/test-sys_time.Po \ - ./$(DEPDIR)/test-sys_types.Po ./$(DEPDIR)/test-sys_uio.Po \ - ./$(DEPDIR)/test-thread_create.Po \ - ./$(DEPDIR)/test-thread_self.Po ./$(DEPDIR)/test-time.Po \ + ./$(DEPDIR)/test-stdbool.Po ./$(DEPDIR)/test-stdckdint.Po \ + ./$(DEPDIR)/test-stddef.Po ./$(DEPDIR)/test-stdint.Po \ + ./$(DEPDIR)/test-stdio.Po ./$(DEPDIR)/test-stdlib.Po \ + ./$(DEPDIR)/test-strerror.Po ./$(DEPDIR)/test-strerror_r.Po \ + ./$(DEPDIR)/test-striconveh.Po ./$(DEPDIR)/test-striconveha.Po \ + ./$(DEPDIR)/test-string.Po ./$(DEPDIR)/test-strncat.Po \ + ./$(DEPDIR)/test-strstr.Po ./$(DEPDIR)/test-symlink.Po \ + ./$(DEPDIR)/test-sys_ioctl.Po ./$(DEPDIR)/test-sys_select.Po \ + ./$(DEPDIR)/test-sys_socket.Po ./$(DEPDIR)/test-sys_stat.Po \ + ./$(DEPDIR)/test-sys_time.Po ./$(DEPDIR)/test-sys_types.Po \ + ./$(DEPDIR)/test-sys_uio.Po ./$(DEPDIR)/test-thread_create.Po \ + ./$(DEPDIR)/test-thread_self.Po ./$(DEPDIR)/test-time-h.Po \ + ./$(DEPDIR)/test-time.Po ./$(DEPDIR)/test-uchar.Po \ ./$(DEPDIR)/test-unistd.Po ./$(DEPDIR)/test-unsetenv.Po \ ./$(DEPDIR)/test-usleep.Po ./$(DEPDIR)/test-verify-try.Po \ ./$(DEPDIR)/test-verify.Po ./$(DEPDIR)/test-wchar.Po \ ./$(DEPDIR)/test-wcrtomb-w32.Po ./$(DEPDIR)/test-wcrtomb.Po \ ./$(DEPDIR)/test-wctype-h.Po ./$(DEPDIR)/test-wcwidth.Po \ - ./$(DEPDIR)/test-xalloc-die.Po ./$(DEPDIR)/unsetenv.Po \ - ./$(DEPDIR)/usleep.Po ./$(DEPDIR)/wcrtomb.Po \ - ./$(DEPDIR)/wctob.Po ./$(DEPDIR)/wctomb.Po \ - ./$(DEPDIR)/windows-thread.Po ./$(DEPDIR)/windows-tls.Po \ - ./$(DEPDIR)/xalloc-die.Po ./$(DEPDIR)/xmalloc.Po \ - glthread/$(DEPDIR)/thread.Po unicase/$(DEPDIR)/test-cased.Po \ + ./$(DEPDIR)/test-xalloc-die.Po ./$(DEPDIR)/time.Po \ + ./$(DEPDIR)/unsetenv.Po ./$(DEPDIR)/usleep.Po \ + ./$(DEPDIR)/wcrtomb.Po ./$(DEPDIR)/wctob.Po \ + ./$(DEPDIR)/wctomb.Po ./$(DEPDIR)/windows-thread.Po \ + ./$(DEPDIR)/windows-tls.Po ./$(DEPDIR)/xalloc-die.Po \ + ./$(DEPDIR)/xmalloc.Po glthread/$(DEPDIR)/thread.Po \ + unicase/$(DEPDIR)/test-cased.Po \ unicase/$(DEPDIR)/test-ignorable.Po \ unicase/$(DEPDIR)/test-locale-language.Po \ unicase/$(DEPDIR)/test-u16-casecmp.Po \ @@ -3643,6 +3905,9 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ unictype/$(DEPDIR)/test-ctype_xdigit.Po \ unictype/$(DEPDIR)/test-decdigit.Po \ unictype/$(DEPDIR)/test-digit.Po \ + unictype/$(DEPDIR)/test-incb_byname.Po \ + unictype/$(DEPDIR)/test-incb_name.Po \ + unictype/$(DEPDIR)/test-incb_of.Po \ unictype/$(DEPDIR)/test-joininggroup_byname.Po \ unictype/$(DEPDIR)/test-joininggroup_name.Po \ unictype/$(DEPDIR)/test-joininggroup_of.Po \ @@ -3700,11 +3965,14 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ unictype/$(DEPDIR)/test-pr_grapheme_link.Po \ unictype/$(DEPDIR)/test-pr_hex_digit.Po \ unictype/$(DEPDIR)/test-pr_hyphen.Po \ + unictype/$(DEPDIR)/test-pr_id_compat_math_continue.Po \ + unictype/$(DEPDIR)/test-pr_id_compat_math_start.Po \ unictype/$(DEPDIR)/test-pr_id_continue.Po \ unictype/$(DEPDIR)/test-pr_id_start.Po \ unictype/$(DEPDIR)/test-pr_ideographic.Po \ unictype/$(DEPDIR)/test-pr_ids_binary_operator.Po \ unictype/$(DEPDIR)/test-pr_ids_trinary_operator.Po \ + unictype/$(DEPDIR)/test-pr_ids_unary_operator.Po \ unictype/$(DEPDIR)/test-pr_ignorable_control.Po \ unictype/$(DEPDIR)/test-pr_iso_control.Po \ unictype/$(DEPDIR)/test-pr_join_control.Po \ @@ -3728,6 +3996,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ unictype/$(DEPDIR)/test-pr_paragraph_separator.Po \ unictype/$(DEPDIR)/test-pr_pattern_syntax.Po \ unictype/$(DEPDIR)/test-pr_pattern_white_space.Po \ + unictype/$(DEPDIR)/test-pr_prepended_concatenation_mark.Po \ unictype/$(DEPDIR)/test-pr_private_use.Po \ unictype/$(DEPDIR)/test-pr_punctuation.Po \ unictype/$(DEPDIR)/test-pr_quotation_mark.Po \ @@ -3773,6 +4042,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ unilbrk/$(DEPDIR)/test-u8-width-linebreaks.Po \ unilbrk/$(DEPDIR)/test-ulc-possible-linebreaks.Po \ unilbrk/$(DEPDIR)/test-ulc-width-linebreaks.Po \ + unimetadata/$(DEPDIR)/test-u-version.Po \ uniname/$(DEPDIR)/test-uninames.Po \ uninorm/$(DEPDIR)/test-canonical-decomposition.Po \ uninorm/$(DEPDIR)/test-compat-decomposition.Po \ @@ -3846,6 +4116,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ unistr/$(DEPDIR)/test-u16-mbtoucr.Po \ unistr/$(DEPDIR)/test-u16-move.Po \ unistr/$(DEPDIR)/test-u16-next.Po \ + unistr/$(DEPDIR)/test-u16-pcpy.Po \ unistr/$(DEPDIR)/test-u16-prev.Po \ unistr/$(DEPDIR)/test-u16-set.Po \ unistr/$(DEPDIR)/test-u16-stpcpy.Po \ @@ -3881,6 +4152,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ unistr/$(DEPDIR)/test-u32-mbtoucr.Po \ unistr/$(DEPDIR)/test-u32-move.Po \ unistr/$(DEPDIR)/test-u32-next.Po \ + unistr/$(DEPDIR)/test-u32-pcpy.Po \ unistr/$(DEPDIR)/test-u32-prev.Po \ unistr/$(DEPDIR)/test-u32-set.Po \ unistr/$(DEPDIR)/test-u32-stpcpy.Po \ @@ -3916,6 +4188,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \ unistr/$(DEPDIR)/test-u8-mbtoucr.Po \ unistr/$(DEPDIR)/test-u8-move.Po \ unistr/$(DEPDIR)/test-u8-next.Po \ + unistr/$(DEPDIR)/test-u8-pcpy.Po \ unistr/$(DEPDIR)/test-u8-prev.Po \ unistr/$(DEPDIR)/test-u8-set.Po \ unistr/$(DEPDIR)/test-u8-stpcpy.Po \ @@ -3971,14 +4244,20 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ - $(current_locale_SOURCES) test-accept.c test-alloca-opt.c \ - test-arpa_inet.c test-array-mergesort.c test-assert.c \ - $(test_bidi_byname_SOURCES) $(test_bidi_longname_SOURCES) \ - $(test_bidi_name_SOURCES) $(test_bidi_of_SOURCES) \ - $(test_bidi_test_SOURCES) test-binary-io.c test-bind.c \ - $(test_block_list_SOURCES) $(test_block_of_SOURCES) \ - $(test_block_test_SOURCES) test-btowc.c test-c-ctype.c \ - test-c-strcasecmp.c test-c-strncasecmp.c test-calloc-gnu.c \ + $(current_locale_SOURCES) test-accept.c test-alignasof.c \ + test-alloca-opt.c test-arpa_inet.c test-array-mergesort.c \ + test-assert.c $(test_bidi_byname_SOURCES) \ + $(test_bidi_longname_SOURCES) $(test_bidi_name_SOURCES) \ + $(test_bidi_of_SOURCES) $(test_bidi_test_SOURCES) \ + test-binary-io.c test-bind.c $(test_block_list_SOURCES) \ + $(test_block_of_SOURCES) $(test_block_test_SOURCES) \ + test-btoc32.c test-btowc.c test-c-ctype.c test-c-strcasecmp.c \ + test-c-strncasecmp.c test-c32isalnum.c test-c32isalpha.c \ + test-c32isblank.c test-c32iscntrl.c test-c32isdigit.c \ + test-c32isgraph.c test-c32islower.c test-c32isprint.c \ + test-c32ispunct.c test-c32isspace.c test-c32isupper.c \ + test-c32isxdigit.c test-c32rtomb.c test-c32rtomb-w32.c \ + test-c32tolower.c test-c32width.c test-calloc-gnu.c \ $(test_canonical_decomposition_SOURCES) $(test_cased_SOURCES) \ $(test_categ_C_SOURCES) $(test_categ_Cc_SOURCES) \ $(test_categ_Cf_SOURCES) $(test_categ_Cn_SOURCES) \ @@ -4018,28 +4297,32 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ $(test_ctype_upper_SOURCES) $(test_ctype_xdigit_SOURCES) \ $(test_decdigit_SOURCES) $(test_decomposing_form_SOURCES) \ $(test_decomposition_SOURCES) $(test_digit_SOURCES) \ - test-dup2.c test-environ.c test-errno.c test-fcntl.c \ - test-fcntl-h.c test-fdopen.c test-fgetc.c test-float.c \ - test-fputc.c test-fread.c test-free.c \ + test-dup2.c test-environ.c test-errno.c test-error.c \ + test-fcntl.c test-fcntl-h.c test-fdopen.c test-fgetc.c \ + test-float.c test-fputc.c test-fread.c test-free.c \ $(test_frexp_nolibm_SOURCES) $(test_frexpl_nolibm_SOURCES) \ test-fseterr.c test-fstat.c test-ftruncate.c test-fwrite.c \ test-getcwd-lgpl.c test-getdtablesize.c test-getprogname.c \ test-gettimeofday.c test-hard-locale.c test-iconv.c \ test-iconv-h.c $(test_ignorable_SOURCES) test-ignore-value.c \ - test-inet_pton.c test-intprops.c test-inttypes.c test-ioctl.c \ - test-isblank.c test-isnand-nolibm.c test-isnanf-nolibm.c \ - test-isnanl-nolibm.c test-iswblank.c test-iswdigit.c \ + $(test_incb_byname_SOURCES) $(test_incb_name_SOURCES) \ + $(test_incb_of_SOURCES) test-inet_pton.c test-intprops.c \ + test-inttypes.c test-ioctl.c test-isblank.c \ + test-isnand-nolibm.c test-isnanf-nolibm.c test-isnanl-nolibm.c \ + test-iswblank.c test-iswdigit.c test-iswpunct.c \ test-iswxdigit.c $(test_joininggroup_byname_SOURCES) \ $(test_joininggroup_name_SOURCES) \ $(test_joininggroup_of_SOURCES) \ $(test_joiningtype_byname_SOURCES) \ $(test_joiningtype_longname_SOURCES) \ $(test_joiningtype_name_SOURCES) \ - $(test_joiningtype_of_SOURCES) test-langinfo.c test-limits-h.c \ - test-listen.c test-localcharset.c test-locale.c \ + $(test_joiningtype_of_SOURCES) test-langinfo.c \ + test-largefile.c test-limits-h.c test-listen.c \ + test-localcharset.c test-locale.c \ $(test_locale_language_SOURCES) test-localename.c test-lock.c \ test-lstat.c test-malloc-gnu.c test-malloca.c test-math.c \ - test-mbrtowc.c test-mbrtowc-w32.c test-mbsinit.c test-memchr.c \ + test-mbrtoc32.c test-mbrtoc32-w32.c test-mbrtowc.c \ + test-mbrtowc-w32.c test-mbsinit.c test-memchr.c \ $(test_mirror_SOURCES) test-nanosleep.c test-netinet_in.c \ $(test_nfc_SOURCES) $(test_nfd_SOURCES) $(test_nfkc_SOURCES) \ $(test_nfkd_SOURCES) $(test_numeric_SOURCES) \ @@ -4084,10 +4367,14 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ $(test_pr_grapheme_base_SOURCES) \ $(test_pr_grapheme_extend_SOURCES) \ $(test_pr_grapheme_link_SOURCES) $(test_pr_hex_digit_SOURCES) \ - $(test_pr_hyphen_SOURCES) $(test_pr_id_continue_SOURCES) \ - $(test_pr_id_start_SOURCES) $(test_pr_ideographic_SOURCES) \ + $(test_pr_hyphen_SOURCES) \ + $(test_pr_id_compat_math_continue_SOURCES) \ + $(test_pr_id_compat_math_start_SOURCES) \ + $(test_pr_id_continue_SOURCES) $(test_pr_id_start_SOURCES) \ + $(test_pr_ideographic_SOURCES) \ $(test_pr_ids_binary_operator_SOURCES) \ $(test_pr_ids_trinary_operator_SOURCES) \ + $(test_pr_ids_unary_operator_SOURCES) \ $(test_pr_ignorable_control_SOURCES) \ $(test_pr_iso_control_SOURCES) $(test_pr_join_control_SOURCES) \ $(test_pr_left_of_pair_SOURCES) \ @@ -4108,6 +4395,7 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ $(test_pr_paragraph_separator_SOURCES) \ $(test_pr_pattern_syntax_SOURCES) \ $(test_pr_pattern_white_space_SOURCES) \ + $(test_pr_prepended_concatenation_mark_SOURCES) \ $(test_pr_private_use_SOURCES) $(test_pr_punctuation_SOURCES) \ $(test_pr_quotation_mark_SOURCES) $(test_pr_radical_SOURCES) \ $(test_pr_regional_indicator_SOURCES) \ @@ -4123,15 +4411,16 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ $(test_pr_xid_start_SOURCES) $(test_pr_zero_width_SOURCES) \ test-printf-frexp.c test-printf-frexpl.c test-pselect.c \ test-pthread.c test-pthread-thread.c test-pthread_sigmask1.c \ - test-pthread_sigmask2.c test-raise.c test-realloc-gnu.c \ + test-pthread_sigmask2.c test-raise.c test-random.c \ + test-random-mt.c test-random_r.c test-realloc-gnu.c \ test-reallocarray.c test-rwlock1.c test-sched.c \ $(test_scripts_SOURCES) test-select.c test-select-fd.c \ test-select-stdin.c test-setenv.c test-setlocale1.c \ test-setlocale2.c test-setlocale_null.c \ test-setlocale_null-mt-all.c test-setlocale_null-mt-one.c \ - test-setsockopt.c test-signal-h.c test-signbit.c \ - test-sigprocmask.c test-sleep.c test-sockets.c test-stat.c \ - test-stat-time.c test-stdalign.c test-stdbool.c \ + test-setlocale_null-unlocked.c test-setsockopt.c \ + test-signal-h.c test-signbit.c test-sigprocmask.c test-sleep.c \ + test-sockets.c test-stat.c test-stat-time.c test-stdbool.c \ test-stdckdint.c test-stddef.c test-stdint.c test-stdio.c \ test-stdlib.c test-strerror.c test-strerror_r.c \ test-striconveh.c $(test_striconveha_SOURCES) test-string.c \ @@ -4141,11 +4430,12 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ test-sys_ioctl.c test-sys_select.c test-sys_socket.c \ test-sys_stat.c test-sys_time.c test-sys_types.c \ test-sys_uio.c test-thread_create.c test-thread_self.c \ - test-time.c $(test_u16_asnprintf1_SOURCES) \ - $(test_u16_casecmp_SOURCES) $(test_u16_casecoll_SOURCES) \ - $(test_u16_casefold_SOURCES) $(test_u16_check_SOURCES) \ - $(test_u16_chr_SOURCES) $(test_u16_cmp_SOURCES) \ - $(test_u16_cmp2_SOURCES) $(test_u16_conv_from_enc_SOURCES) \ + test-time.c test-time-h.c $(test_u_version_SOURCES) \ + $(test_u16_asnprintf1_SOURCES) $(test_u16_casecmp_SOURCES) \ + $(test_u16_casecoll_SOURCES) $(test_u16_casefold_SOURCES) \ + $(test_u16_check_SOURCES) $(test_u16_chr_SOURCES) \ + $(test_u16_cmp_SOURCES) $(test_u16_cmp2_SOURCES) \ + $(test_u16_conv_from_enc_SOURCES) \ $(test_u16_conv_to_enc_SOURCES) $(test_u16_cpy_SOURCES) \ $(test_u16_cpy_alloc_SOURCES) \ $(test_u16_grapheme_breaks_SOURCES) \ @@ -4159,6 +4449,7 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ $(test_u16_mbtouc_unsafe_SOURCES) $(test_u16_mbtoucr_SOURCES) \ $(test_u16_move_SOURCES) $(test_u16_next_SOURCES) \ $(test_u16_normcmp_SOURCES) $(test_u16_normcoll_SOURCES) \ + $(test_u16_pcpy_SOURCES) \ $(test_u16_possible_linebreaks_SOURCES) \ $(test_u16_prev_SOURCES) $(test_u16_set_SOURCES) \ $(test_u16_stpcpy_SOURCES) $(test_u16_stpncpy_SOURCES) \ @@ -4199,6 +4490,7 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ $(test_u32_nfc_big_SOURCES) $(test_u32_nfd_big_SOURCES) \ $(test_u32_nfkc_big_SOURCES) $(test_u32_nfkd_big_SOURCES) \ $(test_u32_normcmp_SOURCES) $(test_u32_normcoll_SOURCES) \ + $(test_u32_pcpy_SOURCES) \ $(test_u32_possible_linebreaks_SOURCES) \ $(test_u32_prev_SOURCES) $(test_u32_set_SOURCES) \ $(test_u32_stpcpy_SOURCES) $(test_u32_stpncpy_SOURCES) \ @@ -4237,11 +4529,12 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ $(test_u8_mbtouc_unsafe_SOURCES) $(test_u8_mbtoucr_SOURCES) \ $(test_u8_move_SOURCES) $(test_u8_next_SOURCES) \ $(test_u8_normcmp_SOURCES) $(test_u8_normcoll_SOURCES) \ - $(test_u8_possible_linebreaks_SOURCES) $(test_u8_prev_SOURCES) \ - $(test_u8_set_SOURCES) $(test_u8_stpcpy_SOURCES) \ - $(test_u8_stpncpy_SOURCES) $(test_u8_strcat_SOURCES) \ - $(test_u8_strchr_SOURCES) $(test_u8_strcmp_SOURCES) \ - $(test_u8_strcoll_SOURCES) $(test_u8_strconv_from_enc_SOURCES) \ + $(test_u8_pcpy_SOURCES) $(test_u8_possible_linebreaks_SOURCES) \ + $(test_u8_prev_SOURCES) $(test_u8_set_SOURCES) \ + $(test_u8_stpcpy_SOURCES) $(test_u8_stpncpy_SOURCES) \ + $(test_u8_strcat_SOURCES) $(test_u8_strchr_SOURCES) \ + $(test_u8_strcmp_SOURCES) $(test_u8_strcoll_SOURCES) \ + $(test_u8_strconv_from_enc_SOURCES) \ $(test_u8_strconv_to_enc_SOURCES) $(test_u8_strcpy_SOURCES) \ $(test_u8_strdup_SOURCES) $(test_u8_strlen_SOURCES) \ $(test_u8_strmblen_SOURCES) $(test_u8_strmbtouc_SOURCES) \ @@ -4262,8 +4555,8 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ $(test_uc_wordbreaks_SOURCES) $(test_uc_tolower_SOURCES) \ $(test_uc_totitle_SOURCES) $(test_uc_toupper_SOURCES) \ $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ - $(test_ulc_asnprintf1_SOURCES) $(test_ulc_casecmp_SOURCES) \ - $(test_ulc_casecoll_SOURCES) \ + test-uchar.c $(test_ulc_asnprintf1_SOURCES) \ + $(test_ulc_casecmp_SOURCES) $(test_ulc_casecoll_SOURCES) \ $(test_ulc_grapheme_breaks_SOURCES) \ $(test_ulc_possible_linebreaks_SOURCES) \ $(test_ulc_vasnprintf1_SOURCES) \ @@ -4278,14 +4571,20 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ test-wcwidth.c test-xalloc-die.c DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(EXTRA_libtests_a_SOURCES) $(current_locale_SOURCES) \ - test-accept.c test-alloca-opt.c test-arpa_inet.c \ - test-array-mergesort.c test-assert.c \ + test-accept.c test-alignasof.c test-alloca-opt.c \ + test-arpa_inet.c test-array-mergesort.c test-assert.c \ $(test_bidi_byname_SOURCES) $(test_bidi_longname_SOURCES) \ $(test_bidi_name_SOURCES) $(test_bidi_of_SOURCES) \ $(test_bidi_test_SOURCES) test-binary-io.c test-bind.c \ $(test_block_list_SOURCES) $(test_block_of_SOURCES) \ - $(test_block_test_SOURCES) test-btowc.c test-c-ctype.c \ - test-c-strcasecmp.c test-c-strncasecmp.c test-calloc-gnu.c \ + $(test_block_test_SOURCES) test-btoc32.c test-btowc.c \ + test-c-ctype.c test-c-strcasecmp.c test-c-strncasecmp.c \ + test-c32isalnum.c test-c32isalpha.c test-c32isblank.c \ + test-c32iscntrl.c test-c32isdigit.c test-c32isgraph.c \ + test-c32islower.c test-c32isprint.c test-c32ispunct.c \ + test-c32isspace.c test-c32isupper.c test-c32isxdigit.c \ + test-c32rtomb.c test-c32rtomb-w32.c test-c32tolower.c \ + test-c32width.c test-calloc-gnu.c \ $(test_canonical_decomposition_SOURCES) $(test_cased_SOURCES) \ $(test_categ_C_SOURCES) $(test_categ_Cc_SOURCES) \ $(test_categ_Cf_SOURCES) $(test_categ_Cn_SOURCES) \ @@ -4325,28 +4624,32 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(test_ctype_upper_SOURCES) $(test_ctype_xdigit_SOURCES) \ $(test_decdigit_SOURCES) $(test_decomposing_form_SOURCES) \ $(test_decomposition_SOURCES) $(test_digit_SOURCES) \ - test-dup2.c test-environ.c test-errno.c test-fcntl.c \ - test-fcntl-h.c test-fdopen.c test-fgetc.c test-float.c \ - test-fputc.c test-fread.c test-free.c \ + test-dup2.c test-environ.c test-errno.c test-error.c \ + test-fcntl.c test-fcntl-h.c test-fdopen.c test-fgetc.c \ + test-float.c test-fputc.c test-fread.c test-free.c \ $(test_frexp_nolibm_SOURCES) $(test_frexpl_nolibm_SOURCES) \ test-fseterr.c test-fstat.c test-ftruncate.c test-fwrite.c \ test-getcwd-lgpl.c test-getdtablesize.c test-getprogname.c \ test-gettimeofday.c test-hard-locale.c test-iconv.c \ test-iconv-h.c $(test_ignorable_SOURCES) test-ignore-value.c \ - test-inet_pton.c test-intprops.c test-inttypes.c test-ioctl.c \ - test-isblank.c test-isnand-nolibm.c test-isnanf-nolibm.c \ - test-isnanl-nolibm.c test-iswblank.c test-iswdigit.c \ + $(test_incb_byname_SOURCES) $(test_incb_name_SOURCES) \ + $(test_incb_of_SOURCES) test-inet_pton.c test-intprops.c \ + test-inttypes.c test-ioctl.c test-isblank.c \ + test-isnand-nolibm.c test-isnanf-nolibm.c test-isnanl-nolibm.c \ + test-iswblank.c test-iswdigit.c test-iswpunct.c \ test-iswxdigit.c $(test_joininggroup_byname_SOURCES) \ $(test_joininggroup_name_SOURCES) \ $(test_joininggroup_of_SOURCES) \ $(test_joiningtype_byname_SOURCES) \ $(test_joiningtype_longname_SOURCES) \ $(test_joiningtype_name_SOURCES) \ - $(test_joiningtype_of_SOURCES) test-langinfo.c test-limits-h.c \ - test-listen.c test-localcharset.c test-locale.c \ + $(test_joiningtype_of_SOURCES) test-langinfo.c \ + test-largefile.c test-limits-h.c test-listen.c \ + test-localcharset.c test-locale.c \ $(test_locale_language_SOURCES) test-localename.c test-lock.c \ test-lstat.c test-malloc-gnu.c test-malloca.c test-math.c \ - test-mbrtowc.c test-mbrtowc-w32.c test-mbsinit.c test-memchr.c \ + test-mbrtoc32.c test-mbrtoc32-w32.c test-mbrtowc.c \ + test-mbrtowc-w32.c test-mbsinit.c test-memchr.c \ $(test_mirror_SOURCES) test-nanosleep.c test-netinet_in.c \ $(test_nfc_SOURCES) $(test_nfd_SOURCES) $(test_nfkc_SOURCES) \ $(test_nfkd_SOURCES) $(test_numeric_SOURCES) \ @@ -4391,10 +4694,14 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(test_pr_grapheme_base_SOURCES) \ $(test_pr_grapheme_extend_SOURCES) \ $(test_pr_grapheme_link_SOURCES) $(test_pr_hex_digit_SOURCES) \ - $(test_pr_hyphen_SOURCES) $(test_pr_id_continue_SOURCES) \ - $(test_pr_id_start_SOURCES) $(test_pr_ideographic_SOURCES) \ + $(test_pr_hyphen_SOURCES) \ + $(test_pr_id_compat_math_continue_SOURCES) \ + $(test_pr_id_compat_math_start_SOURCES) \ + $(test_pr_id_continue_SOURCES) $(test_pr_id_start_SOURCES) \ + $(test_pr_ideographic_SOURCES) \ $(test_pr_ids_binary_operator_SOURCES) \ $(test_pr_ids_trinary_operator_SOURCES) \ + $(test_pr_ids_unary_operator_SOURCES) \ $(test_pr_ignorable_control_SOURCES) \ $(test_pr_iso_control_SOURCES) $(test_pr_join_control_SOURCES) \ $(test_pr_left_of_pair_SOURCES) \ @@ -4415,6 +4722,7 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(test_pr_paragraph_separator_SOURCES) \ $(test_pr_pattern_syntax_SOURCES) \ $(test_pr_pattern_white_space_SOURCES) \ + $(test_pr_prepended_concatenation_mark_SOURCES) \ $(test_pr_private_use_SOURCES) $(test_pr_punctuation_SOURCES) \ $(test_pr_quotation_mark_SOURCES) $(test_pr_radical_SOURCES) \ $(test_pr_regional_indicator_SOURCES) \ @@ -4430,15 +4738,16 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(test_pr_xid_start_SOURCES) $(test_pr_zero_width_SOURCES) \ test-printf-frexp.c test-printf-frexpl.c test-pselect.c \ test-pthread.c test-pthread-thread.c test-pthread_sigmask1.c \ - test-pthread_sigmask2.c test-raise.c test-realloc-gnu.c \ + test-pthread_sigmask2.c test-raise.c test-random.c \ + test-random-mt.c test-random_r.c test-realloc-gnu.c \ test-reallocarray.c test-rwlock1.c test-sched.c \ $(test_scripts_SOURCES) test-select.c test-select-fd.c \ test-select-stdin.c test-setenv.c test-setlocale1.c \ test-setlocale2.c test-setlocale_null.c \ test-setlocale_null-mt-all.c test-setlocale_null-mt-one.c \ - test-setsockopt.c test-signal-h.c test-signbit.c \ - test-sigprocmask.c test-sleep.c test-sockets.c test-stat.c \ - test-stat-time.c test-stdalign.c test-stdbool.c \ + test-setlocale_null-unlocked.c test-setsockopt.c \ + test-signal-h.c test-signbit.c test-sigprocmask.c test-sleep.c \ + test-sockets.c test-stat.c test-stat-time.c test-stdbool.c \ test-stdckdint.c test-stddef.c test-stdint.c test-stdio.c \ test-stdlib.c test-strerror.c test-strerror_r.c \ test-striconveh.c $(test_striconveha_SOURCES) test-string.c \ @@ -4448,11 +4757,12 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ test-sys_ioctl.c test-sys_select.c test-sys_socket.c \ test-sys_stat.c test-sys_time.c test-sys_types.c \ test-sys_uio.c test-thread_create.c test-thread_self.c \ - test-time.c $(test_u16_asnprintf1_SOURCES) \ - $(test_u16_casecmp_SOURCES) $(test_u16_casecoll_SOURCES) \ - $(test_u16_casefold_SOURCES) $(test_u16_check_SOURCES) \ - $(test_u16_chr_SOURCES) $(test_u16_cmp_SOURCES) \ - $(test_u16_cmp2_SOURCES) $(test_u16_conv_from_enc_SOURCES) \ + test-time.c test-time-h.c $(test_u_version_SOURCES) \ + $(test_u16_asnprintf1_SOURCES) $(test_u16_casecmp_SOURCES) \ + $(test_u16_casecoll_SOURCES) $(test_u16_casefold_SOURCES) \ + $(test_u16_check_SOURCES) $(test_u16_chr_SOURCES) \ + $(test_u16_cmp_SOURCES) $(test_u16_cmp2_SOURCES) \ + $(test_u16_conv_from_enc_SOURCES) \ $(test_u16_conv_to_enc_SOURCES) $(test_u16_cpy_SOURCES) \ $(test_u16_cpy_alloc_SOURCES) \ $(test_u16_grapheme_breaks_SOURCES) \ @@ -4466,6 +4776,7 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(test_u16_mbtouc_unsafe_SOURCES) $(test_u16_mbtoucr_SOURCES) \ $(test_u16_move_SOURCES) $(test_u16_next_SOURCES) \ $(test_u16_normcmp_SOURCES) $(test_u16_normcoll_SOURCES) \ + $(test_u16_pcpy_SOURCES) \ $(test_u16_possible_linebreaks_SOURCES) \ $(test_u16_prev_SOURCES) $(test_u16_set_SOURCES) \ $(test_u16_stpcpy_SOURCES) $(test_u16_stpncpy_SOURCES) \ @@ -4506,6 +4817,7 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(test_u32_nfc_big_SOURCES) $(test_u32_nfd_big_SOURCES) \ $(test_u32_nfkc_big_SOURCES) $(test_u32_nfkd_big_SOURCES) \ $(test_u32_normcmp_SOURCES) $(test_u32_normcoll_SOURCES) \ + $(test_u32_pcpy_SOURCES) \ $(test_u32_possible_linebreaks_SOURCES) \ $(test_u32_prev_SOURCES) $(test_u32_set_SOURCES) \ $(test_u32_stpcpy_SOURCES) $(test_u32_stpncpy_SOURCES) \ @@ -4544,11 +4856,12 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(test_u8_mbtouc_unsafe_SOURCES) $(test_u8_mbtoucr_SOURCES) \ $(test_u8_move_SOURCES) $(test_u8_next_SOURCES) \ $(test_u8_normcmp_SOURCES) $(test_u8_normcoll_SOURCES) \ - $(test_u8_possible_linebreaks_SOURCES) $(test_u8_prev_SOURCES) \ - $(test_u8_set_SOURCES) $(test_u8_stpcpy_SOURCES) \ - $(test_u8_stpncpy_SOURCES) $(test_u8_strcat_SOURCES) \ - $(test_u8_strchr_SOURCES) $(test_u8_strcmp_SOURCES) \ - $(test_u8_strcoll_SOURCES) $(test_u8_strconv_from_enc_SOURCES) \ + $(test_u8_pcpy_SOURCES) $(test_u8_possible_linebreaks_SOURCES) \ + $(test_u8_prev_SOURCES) $(test_u8_set_SOURCES) \ + $(test_u8_stpcpy_SOURCES) $(test_u8_stpncpy_SOURCES) \ + $(test_u8_strcat_SOURCES) $(test_u8_strchr_SOURCES) \ + $(test_u8_strcmp_SOURCES) $(test_u8_strcoll_SOURCES) \ + $(test_u8_strconv_from_enc_SOURCES) \ $(test_u8_strconv_to_enc_SOURCES) $(test_u8_strcpy_SOURCES) \ $(test_u8_strdup_SOURCES) $(test_u8_strlen_SOURCES) \ $(test_u8_strmblen_SOURCES) $(test_u8_strmbtouc_SOURCES) \ @@ -4569,8 +4882,8 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(test_uc_wordbreaks_SOURCES) $(test_uc_tolower_SOURCES) \ $(test_uc_totitle_SOURCES) $(test_uc_toupper_SOURCES) \ $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ - $(test_ulc_asnprintf1_SOURCES) $(test_ulc_casecmp_SOURCES) \ - $(test_ulc_casecoll_SOURCES) \ + test-uchar.c $(test_ulc_asnprintf1_SOURCES) \ + $(test_ulc_casecmp_SOURCES) $(test_ulc_casecoll_SOURCES) \ $(test_ulc_grapheme_breaks_SOURCES) \ $(test_ulc_possible_linebreaks_SOURCES) \ $(test_ulc_vasnprintf1_SOURCES) \ @@ -4884,6 +5197,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ +CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ +CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DEXEEXT=\"@EXEEXT@\" DEPDIR = @DEPDIR@ @@ -4925,7 +5240,33 @@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ +GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ +GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ +GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ +GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ +GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ +GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ +GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ +GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ +GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ +GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ +GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ +GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ +GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ +GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ +GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ +GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ +GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ +GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ +GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ +GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ +GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ +GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ +GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ +GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ +GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ +GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ @@ -5038,6 +5379,7 @@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ +GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ @@ -5069,16 +5411,18 @@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ +GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ +GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ -GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ +GL_GNULIB_LOCALENAME_UNSAFE = @GL_GNULIB_LOCALENAME_UNSAFE@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ @@ -5100,6 +5444,8 @@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ +GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ +GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ @@ -5109,15 +5455,20 @@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ +GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ +GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ +GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ +GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ +GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ @@ -5170,6 +5521,7 @@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ +GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ @@ -5223,6 +5575,7 @@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ +GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ @@ -5297,6 +5650,7 @@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ +GL_GNULIB_STRTOF = @GL_GNULIB_STRTOF@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ @@ -5312,12 +5666,16 @@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ +GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ +GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ +GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ +GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ @@ -5325,6 +5683,148 @@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ +GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ +GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PREPENDED_CONCATENATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PREPENDED_CONCATENATION_MARK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ +GL_GNULIB_UNIMETADATA_UNICODE_VERSION_DLL_VARIABLE = @GL_GNULIB_UNIMETADATA_UNICODE_VERSION_DLL_VARIABLE@ +GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ +GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ +GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ +GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ @@ -5376,6 +5876,7 @@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ +GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ @@ -5384,9 +5885,12 @@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ +GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ +GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ +GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ -GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ +HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ @@ -5400,6 +5904,7 @@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ @@ -5449,6 +5954,7 @@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ @@ -5465,6 +5971,8 @@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ +HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ @@ -5499,6 +6007,9 @@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_ERROR = @HAVE_ERROR@ +HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ +HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ @@ -5537,6 +6048,7 @@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ @@ -5548,6 +6060,8 @@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXABS = @HAVE_IMAXABS@ +HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ @@ -5580,6 +6094,8 @@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOC16 = @HAVE_MBRTOC16@ +HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ @@ -5587,6 +6103,7 @@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ @@ -5727,6 +6244,7 @@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOF = @HAVE_STRTOF@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ @@ -5759,8 +6277,13 @@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TOTALORDER = @HAVE_TOTALORDER@ +HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ +HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ @@ -5808,6 +6331,7 @@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ @@ -5825,6 +6349,10 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ +LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ +LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ +LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -5844,6 +6372,7 @@ LIBUNISTRING_UNICONV_H = @LIBUNISTRING_UNICONV_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNIGBRK_H = @LIBUNISTRING_UNIGBRK_H@ LIBUNISTRING_UNILBRK_H = @LIBUNISTRING_UNILBRK_H@ +LIBUNISTRING_UNIMETADATA_H = @LIBUNISTRING_UNIMETADATA_H@ LIBUNISTRING_UNINAME_H = @LIBUNISTRING_UNINAME_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNISTDIO_H = @LIBUNISTRING_UNISTDIO_H@ @@ -5880,8 +6409,10 @@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ +MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NAMESPACING = @NAMESPACING@ +NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ @@ -5889,6 +6420,7 @@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_H@ @@ -5914,11 +6446,13 @@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_ICONV_H = @NEXT_ICONV_H@ @@ -5944,6 +6478,7 @@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ @@ -5966,6 +6501,7 @@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ RC = @RC@ @@ -5977,6 +6513,7 @@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ @@ -5996,7 +6533,10 @@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_ERROR = @REPLACE_ERROR@ +REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ @@ -6013,10 +6553,12 @@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ @@ -6051,12 +6593,16 @@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ +REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ +REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ @@ -6069,6 +6615,8 @@ REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_IMAXABS = @REPLACE_IMAXABS@ +REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ @@ -6080,9 +6628,11 @@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ +REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ @@ -6109,19 +6659,27 @@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ +REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ +REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ +REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ +REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ @@ -6136,8 +6694,10 @@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ +REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ @@ -6199,6 +6759,7 @@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ @@ -6222,6 +6783,7 @@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ @@ -6236,6 +6798,7 @@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ @@ -6250,6 +6813,7 @@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOF = @REPLACE_STRTOF@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ @@ -6260,12 +6824,19 @@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ +REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ +REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ +REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ @@ -6285,21 +6856,33 @@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCTRANS = @REPLACE_WCTRANS@ +REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ +REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ +REPLACE__EXIT = @REPLACE__EXIT@ +SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ +SELECT_LIB = @SELECT_LIB@ +SETLOCALE_LIB = @SETLOCALE_LIB@ +SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ -STDALIGN_H = @STDALIGN_H@ +SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ @@ -6396,6 +6979,7 @@ SUBDIRS = . # This must be the last thing that gets added to TESTS_ENVIRONMENT. TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ @@ -6403,6 +6987,36 @@ TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' LOCALE_FR='@LOCALE_FR@' \ @@ -6422,72 +7036,103 @@ TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \ noinst_HEADERS = noinst_LIBRARIES = check_LIBRARIES = libtests.a -EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ - test-alloca-opt.c arpa_inet.in.h test-arpa_inet.c \ - test-array-mergesort.c macros.h test-assert.c basename-lgpl.h \ - test-binary-io.sh test-binary-io.c macros.h w32sock.h \ - test-bind.c signature.h macros.h test-btowc1.sh test-btowc2.sh \ - test-btowc.c signature.h macros.h test-c-ctype.c macros.h \ - test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c \ - macros.h calloc.c test-calloc-gnu.c macros.h calloc.c \ - cloexec.h test-cloexec.c macros.h test-close.c signature.h \ - macros.h w32sock.h test-connect.c signature.h macros.h \ - ctype.in.h test-ctype.c test-dup2.c signature.h macros.h \ - test-environ.c test-errno.c error.h exitfail.h fcntl.in.h \ - test-fcntl-h.c test-fcntl.c signature.h macros.h fd-hook.h \ - test-fdopen.c signature.h macros.h test-fgetc.c signature.h \ - macros.h filename.h test-float.c macros.h test-fputc.c \ - signature.h macros.h test-fread.c signature.h macros.h \ - test-free.c macros.h test-frexp.c test-frexp.h minus-zero.h \ - infinity.h nan.h signature.h macros.h randomd.c test-frexpl.c \ - test-frexp.h minus-zero.h infinity.h nan.h signature.h \ - macros.h randoml.c test-fseterr.c stat-w32.c stat-w32.h \ - test-fstat.c signature.h macros.h test-ftruncate.c \ - test-ftruncate.sh signature.h macros.h test-fwrite.c \ - signature.h macros.h test-getcwd-lgpl.c signature.h macros.h \ - test-getdtablesize.c signature.h macros.h test-getprogname.c \ - signature.h test-gettimeofday.c test-hard-locale.c locale.c \ - ialloc.h test-iconv-h.c test-iconv.c signature.h macros.h \ +EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h \ + test-alignasof.c macros.h alloca.c test-alloca-opt.c \ + arpa_inet.in.h test-arpa_inet.c test-array-mergesort.c \ + macros.h test-assert.c basename-lgpl.h test-binary-io.sh \ + test-binary-io.c macros.h w32sock.h test-bind.c signature.h \ + macros.h test-btoc32-1.sh test-btoc32-2.sh test-btoc32-3.sh \ + test-btoc32.c signature.h macros.h test-btowc-1.sh \ + test-btowc-2.sh test-btowc-3.sh test-btowc.c signature.h \ + macros.h test-c-ctype.c macros.h test-c-strcase.sh \ + test-c-strcasecmp.c test-c-strncasecmp.c macros.h \ + test-c32isalnum.sh test-c32isalnum.c signature.h macros.h \ + test-c32isalpha.sh test-c32isalpha.c signature.h macros.h \ + test-c32isblank.sh test-c32isblank.c signature.h macros.h \ + test-c32iscntrl.sh test-c32iscntrl.c signature.h macros.h \ + test-c32isdigit.sh test-c32isdigit.c signature.h macros.h \ + test-c32isgraph.sh test-c32isgraph.c signature.h macros.h \ + test-c32islower.sh test-c32islower.c signature.h macros.h \ + test-c32isprint.sh test-c32isprint.c signature.h macros.h \ + test-c32ispunct.sh test-c32ispunct.c signature.h macros.h \ + test-c32isspace.sh test-c32isspace.c signature.h macros.h \ + test-c32isupper.sh test-c32isupper.c signature.h macros.h \ + test-c32isxdigit.sh test-c32isxdigit.c signature.h macros.h \ + test-c32rtomb.sh test-c32rtomb.c test-c32rtomb-w32-2.sh \ + test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh \ + test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh \ + test-c32rtomb-w32-7.sh test-c32rtomb-w32-8.sh \ + test-c32rtomb-w32.c signature.h macros.h test-c32tolower.sh \ + test-c32tolower.c signature.h macros.h test-c32width.c \ + signature.h macros.h calloc.c test-calloc-gnu.c macros.h \ + calloc.c cloexec.h test-cloexec.c macros.h test-close.c \ + signature.h macros.h w32sock.h test-connect.c signature.h \ + macros.h ctype.in.h test-ctype.c test-dup2.c signature.h \ + macros.h test-environ.c test-errno.c error.in.h test-error.sh \ + test-error.c macros.h exitfail.h fcntl.in.h test-fcntl-h.c \ + test-fcntl.c signature.h macros.h fd-hook.h test-fdopen.c \ + signature.h macros.h test-fgetc.c signature.h macros.h \ + filename.h test-float.c macros.h test-fputc.c signature.h \ + macros.h test-fread.c signature.h macros.h test-free.c \ + macros.h test-frexp.c test-frexp.h minus-zero.h infinity.h \ + signature.h macros.h randomd.c test-frexpl.c test-frexp.h \ + minus-zero.h infinity.h signature.h macros.h randoml.c \ + test-fseterr.c stat-w32.c stat-w32.h test-fstat.c signature.h \ + macros.h test-ftruncate.c test-ftruncate.sh signature.h \ + macros.h test-fwrite.c signature.h macros.h test-getcwd-lgpl.c \ + signature.h macros.h test-getdtablesize.c signature.h macros.h \ + getprogname.h test-getprogname.c test-gettimeofday.c \ + signature.h macros.h test-hard-locale.c locale.c ialloc.h \ + test-iconv-h.c test-iconv.c signature.h macros.h \ ignore-value.h test-ignore-value.c test-inet_pton.c \ signature.h macros.h intprops-internal.h intprops.h \ test-intprops.c macros.h test-inttypes.c w32sock.h \ test-ioctl.c signature.h macros.h test-isblank.c signature.h \ macros.h test-isnand-nolibm.c test-isnand.h minus-zero.h \ - infinity.h nan.h macros.h test-isnanf-nolibm.c test-isnanf.h \ - minus-zero.h infinity.h nan.h macros.h test-isnanl-nolibm.c \ - test-isnanl.h minus-zero.h infinity.h nan.h macros.h \ - test-iswblank.c macros.h test-iswdigit.sh test-iswdigit.c \ - signature.h macros.h test-iswxdigit.sh test-iswxdigit.c \ - signature.h macros.h test-langinfo.c test-limits-h.c w32sock.h \ - test-listen.c signature.h macros.h test-localcharset.c \ - test-locale.c test-localename.c macros.h test-rwlock1.c \ - test-lock.c test-once.c atomic-int-gnulib.h test-lstat.h \ - test-lstat.c signature.h macros.h malloc.c test-malloc-gnu.c \ - macros.h test-malloca.c test-math.c macros.h test-mbrtowc1.sh \ - test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh \ - test-mbrtowc5.sh test-mbrtowc.c test-mbrtowc-w32-1.sh \ + infinity.h macros.h test-isnanf-nolibm.c test-isnanf.h \ + minus-zero.h infinity.h macros.h test-isnanl-nolibm.c \ + test-isnanl.h minus-zero.h infinity.h macros.h test-iswblank.c \ + macros.h test-iswdigit.sh test-iswdigit.c signature.h macros.h \ + test-iswpunct.sh test-iswpunct.c signature.h macros.h \ + test-iswxdigit.sh test-iswxdigit.c signature.h macros.h \ + test-langinfo.c test-largefile.c cdefs.h libc-config.h \ + test-limits-h.c w32sock.h test-listen.c signature.h macros.h \ + test-localcharset.c test-locale.c test-localename.c macros.h \ + test-rwlock1.c test-lock.c test-once.c atomic-int-gnulib.h \ + macros.h test-lstat.h test-lstat.c signature.h macros.h \ + malloc.c test-malloc-gnu.c macros.h test-malloca.c test-math.c \ + macros.h test-mbrtoc32-1.sh test-mbrtoc32-2.sh \ + test-mbrtoc32-3.sh test-mbrtoc32-4.sh test-mbrtoc32-5.sh \ + test-mbrtoc32.c test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh \ + test-mbrtoc32-w32-4.sh test-mbrtoc32-w32-5.sh \ + test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh \ + test-mbrtoc32-w32-8.sh test-mbrtoc32-w32.c signature.h \ + macros.h test-mbrtowc-1.sh test-mbrtowc-2.sh test-mbrtowc-3.sh \ + test-mbrtowc-4.sh test-mbrtowc-5.sh test-mbrtowc.c \ test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \ test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh \ - test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh test-mbrtowc-w32.c \ - signature.h macros.h test-mbsinit.sh test-mbsinit.c \ - signature.h macros.h mbtowc-impl.h test-memchr.c \ - zerosize-ptr.h signature.h macros.h msvc-inval.h \ - msvc-nothrow.h test-nanosleep.c signature.h macros.h \ - netinet_in.in.h test-netinet_in.c test-open.h test-open.c \ - signature.h macros.h pathmax.h test-pathmax.c macros.h \ - signature.h test-perror.c test-perror2.c test-perror.sh \ - test-pipe.c signature.h macros.h test-printf-frexp.c macros.h \ - test-printf-frexpl.c macros.h test-pselect.c test-select.h \ - macros.h signature.h pthread.in.h test-pthread.c \ - test-pthread-thread.c macros.h test-pthread_sigmask1.c \ - test-pthread_sigmask2.c signature.h macros.h test-raise.c \ + test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh \ + test-mbrtowc-w32-8.sh test-mbrtowc-w32.c signature.h macros.h \ + test-mbsinit.sh test-mbsinit.c signature.h macros.h \ + mbtowc-impl.h test-memchr.c zerosize-ptr.h signature.h \ + macros.h msvc-inval.h msvc-nothrow.h test-nanosleep.c \ + signature.h macros.h netinet_in.in.h test-netinet_in.c \ + test-open.h test-open.c signature.h macros.h pathmax.h \ + test-pathmax.c macros.h signature.h test-perror.c \ + test-perror2.c test-perror.sh test-pipe.c signature.h macros.h \ + test-printf-frexp.c macros.h test-printf-frexpl.c macros.h \ + test-pselect.c test-select.h macros.h signature.h pthread.in.h \ + test-pthread.c test-pthread-thread.c macros.h \ + test-pthread_sigmask1.c test-pthread_sigmask2.c signature.h \ + macros.h test-raise.c signature.h macros.h test-random.c \ + test-random-mt.c signature.h macros.h test-random_r.c \ signature.h macros.h realloc.c test-realloc-gnu.c macros.h \ - realloc.c test-reallocarray.c signature.h macros.h \ - same-inode.h sched.in.h test-sched.c macros.h signature.h \ - test-select.c test-select.h test-select-fd.c test-select-in.sh \ - test-select-out.sh test-select-stdin.c test-setenv.c \ - signature.h macros.h test-setlocale_null.c \ - test-setlocale_null-mt-one.c test-setlocale_null-mt-all.c \ + realloc.c test-reallocarray.c signature.h macros.h sched.in.h \ + test-sched.c macros.h signature.h test-select.c test-select.h \ + test-select-fd.c test-select-in.sh test-select-out.sh \ + test-select-stdin.c test-setenv.c signature.h macros.h \ + test-setlocale_null.c test-setlocale_null-mt-one.c \ + test-setlocale_null-mt-all.c test-setlocale_null-unlocked.c \ test-setlocale1.sh test-setlocale1.c test-setlocale2.sh \ test-setlocale2.c signature.h macros.h w32sock.h \ test-setsockopt.c signature.h macros.h signal.in.h \ @@ -6496,23 +7141,23 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ signature.h macros.h _Noreturn.h arg-nonnull.h c++defs.h \ warn-on-use.h w32sock.h w32sock.h test-sockets.c stat-w32.c \ stat-w32.h test-stat.h test-stat.c signature.h macros.h \ - stat-time.h test-stat-time.c macros.h nap.h stdalign.in.h \ - test-stdalign.c macros.h test-stdbool.c macros.h \ - test-intprops.c test-stdckdint.c test-stddef.c test-stdint.c \ - stdio.in.h test-stdio.c test-stdlib.c test-sys_wait.h \ - strerror-override.h test-strerror.c signature.h macros.h \ - strerror_r.c test-strerror_r.c signature.h macros.h \ - test-striconveh.c macros.h test-striconveha.c iconvsupport.c \ - macros.h test-string.c test-strncat.c unistr/test-strncat.h \ - zerosize-ptr.h signature.h macros.h test-strstr.c \ - zerosize-ptr.h signature.h macros.h test-symlink.h \ - test-symlink.c signature.h macros.h sys_ioctl.in.h \ - test-sys_ioctl.c sys_select.in.h test-sys_select.c signature.h \ - sys_socket.in.h test-sys_socket.c sys_stat.in.h \ - test-sys_stat.c sys_time.in.h test-sys_time.c test-sys_types.c \ - sys_uio.in.h test-sys_uio.c init.sh test-init.sh \ - test-thread_self.c test-thread_create.c macros.h time.in.h \ - test-time.c unicase/test-cased.c \ + stat-time.h test-stat-time.c macros.h nap.h test-stdbool.c \ + macros.h test-intprops.c test-stdckdint.c test-stddef.c \ + test-stdint.c stdio.in.h test-stdio.c macros.h test-stdlib.c \ + test-sys_wait.h strerror-override.h test-strerror.c \ + signature.h macros.h strerror_r.c test-strerror_r.c \ + signature.h macros.h test-striconveh.c macros.h \ + test-striconveha.c iconvsupport.c macros.h test-string.c \ + test-strncat.c unistr/test-strncat.h zerosize-ptr.h \ + signature.h macros.h test-strstr.c zerosize-ptr.h signature.h \ + macros.h test-symlink.h test-symlink.c signature.h macros.h \ + sys_ioctl.in.h test-sys_ioctl.c sys_select.in.h \ + test-sys_select.c signature.h sys_socket.in.h \ + test-sys_socket.c sys_stat.in.h test-sys_stat.c sys_time.in.h \ + test-sys_time.c test-sys_types.c sys_uio.in.h test-sys_uio.c \ + init.sh test-init.sh test-thread_self.c test-thread_create.c \ + macros.h time.in.h test-time-h.c test-time.c signature.h \ + macros.h test-uchar.c unicase/test-cased.c \ unicase/test-predicate-part1.h unicase/test-predicate-part2.h \ macros.h unicase/test-ignorable.c \ unicase/test-predicate-part1.h unicase/test-predicate-part2.h \ @@ -6696,7 +7341,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ unictype/test-predicate-part2.h macros.h \ unictype/test-decdigit.c unictype/test-decdigit.h macros.h \ unictype/test-digit.c unictype/test-digit.h macros.h \ - unictype/test-joininggroup_byname.c macros.h \ + unictype/test-incb_byname.c macros.h unictype/test-incb_name.c \ + macros.h unictype/test-incb_of.c unictype/test-incb_of.h \ + macros.h unictype/test-joininggroup_byname.c macros.h \ unictype/test-joininggroup_name.c macros.h \ unictype/test-joininggroup_of.c \ unictype/test-joininggroup_of.h macros.h \ @@ -6836,6 +7483,12 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ unictype/test-predicate-part2.h macros.h \ unictype/test-pr_hyphen.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ + unictype/test-pr_id_compat_math_continue.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h macros.h \ + unictype/test-pr_id_compat_math_start.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h macros.h \ unictype/test-pr_id_continue.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-pr_id_start.c unictype/test-predicate-part1.h \ @@ -6848,6 +7501,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ unictype/test-pr_ids_trinary_operator.c \ unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ + unictype/test-pr_ids_unary_operator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h macros.h \ unictype/test-pr_ignorable_control.c \ unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ @@ -6911,6 +7567,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ unictype/test-pr_pattern_white_space.c \ unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ + unictype/test-pr_prepended_concatenation_mark.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h macros.h \ unictype/test-pr_private_use.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-pr_punctuation.c unictype/test-predicate-part1.h \ @@ -6964,19 +7623,19 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ unictype/test-sy_java_whitespace.c \ unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ - unigbrk/test-u16-grapheme-breaks.c \ - unigbrk/test-u16-grapheme-next.c \ - unigbrk/test-u16-grapheme-prev.c \ - unigbrk/test-u32-grapheme-breaks.c \ - unigbrk/test-u32-grapheme-next.c \ - unigbrk/test-u32-grapheme-prev.c \ - unigbrk/test-u8-grapheme-breaks.c \ - unigbrk/test-u8-grapheme-next.c \ - unigbrk/test-u8-grapheme-prev.c unigbrk/test-uc-gbrk-prop.c \ - unigbrk/test-uc-gbrk-prop.h macros.h \ - unigbrk/test-uc-grapheme-breaks.c \ + unigbrk/test-u16-grapheme-breaks.c macros.h \ + unigbrk/test-u16-grapheme-next.c macros.h \ + unigbrk/test-u16-grapheme-prev.c macros.h \ + unigbrk/test-u32-grapheme-breaks.c macros.h \ + unigbrk/test-u32-grapheme-next.c macros.h \ + unigbrk/test-u32-grapheme-prev.c macros.h \ + unigbrk/test-u8-grapheme-breaks.c macros.h \ + unigbrk/test-u8-grapheme-next.c macros.h \ + unigbrk/test-u8-grapheme-prev.c macros.h \ + unigbrk/test-uc-gbrk-prop.c unigbrk/test-uc-gbrk-prop.h \ + macros.h unigbrk/test-uc-grapheme-breaks.c \ unigbrk/test-uc-grapheme-breaks.sh \ - unigbrk/GraphemeBreakTest.txt \ + unigbrk/GraphemeBreakTest.txt macros.h \ unigbrk/test-uc-is-grapheme-break.c \ unigbrk/test-uc-is-grapheme-break.sh \ unigbrk/GraphemeBreakTest.txt \ @@ -6990,10 +7649,11 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ unilbrk/test-u8-width-linebreaks.c macros.h \ unilbrk/test-ulc-possible-linebreaks.c macros.h \ unilbrk/test-ulc-width-linebreaks.c macros.h \ - uniname/test-uninames.sh uniname/test-uninames.c \ - uniname/UnicodeData.txt uniname/HangulSyllableNames.txt \ - uniname/NameAliases.txt uninorm/test-canonical-decomposition.c \ - macros.h uninorm/test-compat-decomposition.c macros.h \ + unimetadata/test-u-version.c macros.h uniname/test-uninames.sh \ + uniname/test-uninames.c uniname/UnicodeData.txt \ + uniname/HangulSyllableNames.txt uniname/NameAliases.txt \ + uninorm/test-canonical-decomposition.c macros.h \ + uninorm/test-compat-decomposition.c macros.h \ uninorm/test-composition.c macros.h \ uninorm/test-decomposing-form.c macros.h \ uninorm/test-decomposition.c macros.h \ @@ -7082,8 +7742,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ unistr/test-u16-mbtouc-unsafe.c unistr/test-u16-mbtouc.h \ macros.h unistr/test-u16-mbtoucr.c macros.h \ unistr/test-u16-move.c unistr/test-move.h macros.h \ - unistr/test-u16-next.c macros.h unistr/test-u16-prev.c \ - macros.h unistr/test-u16-set.c unistr/test-set.h macros.h \ + unistr/test-u16-next.c macros.h unistr/test-u16-pcpy.c \ + unistr/test-pcpy.h macros.h unistr/test-u16-prev.c macros.h \ + unistr/test-u16-set.c unistr/test-set.h macros.h \ unistr/test-u16-stpcpy.c unistr/test-stpcpy.h macros.h \ unistr/test-u16-stpncpy.c unistr/test-stpncpy.h zerosize-ptr.h \ macros.h unistr/test-u16-strcat.c unistr/test-strcat.h \ @@ -7116,8 +7777,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ macros.h unistr/test-u32-mbtouc-unsafe.c \ unistr/test-u32-mbtouc.h macros.h unistr/test-u32-mbtoucr.c \ macros.h unistr/test-u32-move.c unistr/test-move.h macros.h \ - unistr/test-u32-next.c macros.h unistr/test-u32-prev.c \ - macros.h unistr/test-u32-set.c unistr/test-set.h macros.h \ + unistr/test-u32-next.c macros.h unistr/test-u32-pcpy.c \ + unistr/test-pcpy.h macros.h unistr/test-u32-prev.c macros.h \ + unistr/test-u32-set.c unistr/test-set.h macros.h \ unistr/test-u32-stpcpy.c unistr/test-stpcpy.h macros.h \ unistr/test-u32-stpncpy.c unistr/test-stpncpy.h zerosize-ptr.h \ macros.h unistr/test-u32-strcat.c unistr/test-strcat.h \ @@ -7149,7 +7811,8 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ macros.h unistr/test-u8-mbtouc-unsafe.c \ unistr/test-u8-mbtouc.h macros.h unistr/test-u8-mbtoucr.c \ macros.h unistr/test-u8-move.c unistr/test-move.h macros.h \ - unistr/test-u8-next.c macros.h unistr/test-u8-prev.c macros.h \ + unistr/test-u8-next.c macros.h unistr/test-u8-pcpy.c \ + unistr/test-pcpy.h macros.h unistr/test-u8-prev.c macros.h \ unistr/test-u8-set.c unistr/test-set.h macros.h \ unistr/test-u8-stpcpy.c unistr/test-stpcpy.h macros.h \ unistr/test-u8-stpncpy.c unistr/test-stpncpy.h zerosize-ptr.h \ @@ -7186,29 +7849,29 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ signature.h macros.h test-usleep.c signature.h macros.h \ verify.h test-verify.c test-verify-try.c test-verify.sh \ test-wchar.c test-wcrtomb.sh test-wcrtomb.c \ - test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh \ - test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \ - test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh \ - test-wcrtomb-w32-7.sh test-wcrtomb-w32.c signature.h macros.h \ + test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ + test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh \ + test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh \ + test-wcrtomb-w32-8.sh test-wcrtomb-w32.c signature.h macros.h \ wctomb-impl.h test-wctype-h.c macros.h test-wcwidth.c \ signature.h macros.h windows-thread.h windows-tls.h xalloc.h \ xalloc.h test-xalloc-die.c test-xalloc-die.sh -BUILT_SOURCES = arpa/inet.h ctype.h fcntl.h $(NETINET_IN_H) pthread.h \ - sched.h signal.h $(STDALIGN_H) stdio.h sys/ioctl.h \ - sys/select.h sys/socket.h sys/stat.h sys/time.h sys/uio.h \ - time.h +BUILT_SOURCES = arpa/inet.h ctype.h error.h fcntl.h $(NETINET_IN_H) \ + pthread.h sched.h signal.h stdio.h sys/ioctl.h sys/select.h \ + sys/socket.h sys/stat.h sys/time.h sys/uio.h time.h SUFFIXES = # This test expects compilation of test-verify-try.c to fail, and # each time it fails, the makefile rule does not perform the usual # "mv -f $name.Tpo $name.po, so tell make clean to remove that file. MOSTLYCLEANFILES = core *.stackdump arpa/inet.h arpa/inet.h-t ctype.h \ - ctype.h-t fcntl.h fcntl.h-t netinet/in.h netinet/in.h-t \ - pthread.h pthread.h-t sched.h sched.h-t signal.h signal.h-t \ - stdalign.h stdalign.h-t stdio.h stdio.h-t sys/ioctl.h \ - sys/ioctl.h-t sys/select.h sys/select.h-t sys/socket.h \ - sys/socket.h-t sys/stat.h sys/stat.h-t sys/time.h sys/time.h-t \ - sys/uio.h sys/uio.h-t time.h time.h-t \ + ctype.h-t error.h error.h-t fcntl.h fcntl.h-t netinet/in.h \ + netinet/in.h-t pthread.h pthread.h-t1 pthread.h-t2 \ + pthread.h-t3 pthread.h-t4 sched.h sched.h-t signal.h \ + signal.h-t stdio.h stdio.h-t1 stdio.h-t2 stdio.h-t3 \ + sys/ioctl.h sys/ioctl.h-t sys/select.h sys/select.h-t \ + sys/socket.h sys/socket.h-t sys/stat.h sys/stat.h-t sys/time.h \ + sys/time.h-t sys/uio.h sys/uio.h-t time.h time.h-t \ .deps/test-verify-try.Tpo MOSTLYCLEANDIRS = arpa netinet sys sys sys sys sys CLEANFILES = @@ -7223,27 +7886,29 @@ AM_CPPFLAGS = \ LDADD = libtests.a ../lib/libunistring.la libtests.a ../lib/libunistring.la libtests.a $(LIBTESTS_LIBDEPS) libtests_a_SOURCES = $(am__append_1) basename-lgpl.c binary-io.h \ - binary-io.c $(am__append_2) $(am__append_3) cloexec.c \ - $(am__append_4) $(am__append_5) $(am__append_6) \ - $(am__append_7) exitfail.c $(am__append_8) fd-hook.c \ - $(am__append_9) $(am__append_10) $(am__append_11) \ + binary-io.c $(am__append_2) btoc32.c $(am__append_3) \ + $(am__append_4) c32tob.c cloexec.c $(am__append_5) \ + $(am__append_6) $(am__append_7) $(am__append_8) exitfail.c \ + $(am__append_9) fd-hook.c $(am__append_10) $(am__append_11) \ $(am__append_12) $(am__append_13) $(am__append_14) \ - getprogname.h getprogname.c gettext.h $(am__append_15) \ - ialloc.c $(am__append_16) $(am__append_17) $(am__append_18) \ - $(am__append_19) $(am__append_20) $(am__append_21) \ - $(am__append_22) $(am__append_23) $(am__append_24) \ - $(am__append_25) $(am__append_26) $(am__append_27) \ - $(am__append_28) $(am__append_29) $(am__append_30) \ - $(am__append_31) $(am__append_32) $(am__append_33) \ - $(am__append_34) $(am__append_35) $(am__append_36) \ - $(am__append_37) $(am__append_38) $(am__append_39) \ - $(am__append_40) $(am__append_41) sockets.h sockets.c \ - $(am__append_42) stat-time.c $(am__append_43) $(am__append_44) \ - $(am__append_45) $(am__append_46) $(am__append_47) \ - sys_socket.c glthread/thread.h glthread/thread.c \ - $(am__append_52) $(am__append_53) $(am__append_54) \ - $(am__append_55) $(am__append_56) $(am__append_57) \ - $(am__append_58) xmalloc.c xalloc-die.c glthread/yield.h + $(am__append_15) $(am__append_16) gettext.h $(am__append_17) \ + ialloc.c $(am__append_18) $(am__append_19) $(am__append_20) \ + $(am__append_21) $(am__append_22) $(am__append_23) \ + $(am__append_24) $(am__append_25) nan.h $(am__append_26) \ + $(am__append_27) $(am__append_28) $(am__append_29) \ + $(am__append_30) $(am__append_31) $(am__append_32) \ + $(am__append_33) $(am__append_34) $(am__append_35) \ + $(am__append_36) $(am__append_37) same-inode.h same-inode.c \ + $(am__append_38) $(am__append_39) $(am__append_40) \ + $(am__append_41) $(am__append_42) signed-nan.h signed-snan.h \ + $(am__append_43) $(am__append_44) snan.h $(am__append_45) \ + sockets.h sockets.c $(am__append_46) stat-time.c \ + $(am__append_47) $(am__append_48) $(am__append_49) \ + $(am__append_50) $(am__append_51) sys_socket.c \ + glthread/thread.h glthread/thread.c $(am__append_52) \ + $(am__append_57) $(am__append_58) $(am__append_59) \ + $(am__append_60) $(am__append_61) $(am__append_62) \ + $(am__append_63) xmalloc.c xalloc-die.c glthread/yield.h libtests_a_LIBADD = $(gltests_LIBOBJS) @ALLOCA@ libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) @ALLOCA@ EXTRA_libtests_a_SOURCES = alloca.c calloc.c calloc.c stat-w32.c \ @@ -7251,11 +7916,28 @@ EXTRA_libtests_a_SOURCES = alloca.c calloc.c calloc.c stat-w32.c \ AM_LIBTOOLFLAGS = --preserve-dup-deps test_accept_LDADD = $(LDADD) @LIBSOCKET@ test_bind_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) -test_btowc_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_c_ctype_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_c_strcasecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_c_strncasecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) +test_btoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) +test_btowc_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c_ctype_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c_strcasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c_strncasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c32isalnum_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isalpha_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isblank_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32iscntrl_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isgraph_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32islower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isprint_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32ispunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isspace_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isupper_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32rtomb_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) +test_c32tolower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32width_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_connect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) +test_error_LDADD = $(LDADD) $(LIBINTL) test_frexp_nolibm_SOURCES = test-frexp.c randomd.c test_frexpl_nolibm_SOURCES = test-frexpl.c randoml.c @@ -7279,36 +7961,39 @@ GPERF = gperf V_GPERF = $(V_GPERF_@AM_V@) V_GPERF_ = $(V_GPERF_@AM_DEFAULT_V@) V_GPERF_0 = @echo " GPERF " $@; -test_hard_locale_LDADD = $(LDADD) $(LIB_SETLOCALE) @LIB_HARD_LOCALE@ +test_hard_locale_LDADD = $(LDADD) $(SETLOCALE_LIB) @HARD_LOCALE_LIB@ current_locale_SOURCES = locale.c test_iconv_LDADD = $(LDADD) @LIBICONV@ test_inet_pton_LDADD = $(LDADD) @INET_PTON_LIB@ -test_iswdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) -test_iswxdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) +test_iswdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +test_iswpunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +test_iswxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) test_listen_LDADD = $(LDADD) @LIBSOCKET@ -test_localcharset_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_localename_LDADD = $(LDADD) $(LIB_SETLOCALE) @INTL_MACOSX_LIBS@ $(LIBTHREAD) +test_localcharset_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_localename_LDADD = $(LDADD) $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD) test_rwlock1_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ @LIB_SEMAPHORE@ test_once1_SOURCES = test-once.c test_once1_LDADD = $(LDADD) @LIBTHREAD@ test_once2_SOURCES = test-once.c test_once2_LDADD = $(LDADD) @LIBMULTITHREAD@ -test_mbrtowc_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) -test_mbsinit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) -test_nanosleep_LDADD = $(LDADD) $(LIB_NANOSLEEP) -test_pselect_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ @LIB_PTHREAD_SIGMASK@ $(INET_PTON_LIB) +test_mbrtoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) +test_mbrtowc_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +test_mbsinit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +test_nanosleep_LDADD = $(LDADD) $(NANOSLEEP_LIB) +test_pselect_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ @PTHREAD_SIGMASK_LIB@ $(INET_PTON_LIB) test_pthread_thread_LDADD = $(LDADD) @LIBPMULTITHREAD@ -test_pthread_sigmask1_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ -test_pthread_sigmask2_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ @LIBMULTITHREAD@ -test_select_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ $(INET_PTON_LIB) -test_select_fd_LDADD = $(LDADD) @LIB_SELECT@ -test_select_stdin_LDADD = $(LDADD) @LIB_SELECT@ -test_setlocale_null_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ -test_setlocale_null_mt_one_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP) -test_setlocale_null_mt_all_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP) -test_setlocale1_LDADD = $(LDADD) @LIB_SETLOCALE@ -test_setlocale2_LDADD = $(LDADD) @LIB_SETLOCALE@ +test_pthread_sigmask1_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ +test_pthread_sigmask2_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ @LIBMULTITHREAD@ +test_random_mt_LDADD = $(LDADD) $(LIBINTL) $(LIBMULTITHREAD) $(YIELD_LIB) +test_select_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ $(INET_PTON_LIB) +test_select_fd_LDADD = $(LDADD) @SELECT_LIB@ +test_select_stdin_LDADD = $(LDADD) @SELECT_LIB@ +test_setlocale_null_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ +test_setlocale_null_mt_one_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) +test_setlocale_null_mt_all_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) +test_setlocale1_LDADD = $(LDADD) @SETLOCALE_LIB@ +test_setlocale2_LDADD = $(LDADD) @SETLOCALE_LIB@ test_setsockopt_LDADD = $(LDADD) @LIBSOCKET@ # Because this Makefile snippet defines a variable used by other @@ -7332,7 +8017,7 @@ CXXDEFS_H = $(srcdir)/c++defs.h WARN_ON_USE_H = $(srcdir)/warn-on-use.h test_sockets_LDADD = $(LDADD) @LIBSOCKET@ test_stat_LDADD = $(LDADD) $(LIBINTL) -test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) +test_stat_time_LDADD = $(LDADD) $(NANOSLEEP_LIB) test_striconveh_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_striconveha_SOURCES = test-striconveha.c iconvsupport.c test_striconveha_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ @@ -7343,7 +8028,7 @@ test_cased_LDADD = $(LDADD) $(LIBUNISTRING) test_ignorable_SOURCES = unicase/test-ignorable.c test_ignorable_LDADD = $(LDADD) $(LIBUNISTRING) test_locale_language_SOURCES = unicase/test-locale-language.c -test_locale_language_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @INTL_MACOSX_LIBS@ $(LIBTHREAD) +test_locale_language_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @INTL_MACOSX_LIBS@ $(LIBTHREAD) test_uc_tolower_SOURCES = unicase/test-uc_tolower.c test_uc_tolower_LDADD = $(LDADD) $(LIBUNISTRING) test_uc_totitle_SOURCES = unicase/test-uc_totitle.c @@ -7417,9 +8102,9 @@ test_u8_totitle_LDADD = $(LDADD) $(LIBUNISTRING) test_u8_toupper_SOURCES = unicase/test-u8-toupper.c test_u8_toupper_LDADD = $(LDADD) $(LIBUNISTRING) test_ulc_casecmp_SOURCES = unicase/test-ulc-casecmp.c -test_ulc_casecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_casecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_ulc_casecoll_SOURCES = unicase/test-ulc-casecoll.c -test_ulc_casecoll_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_casecoll_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u16_conv_from_enc_SOURCES = uniconv/test-u16-conv-from-enc.c iconvsupport.c test_u16_conv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u16_conv_to_enc_SOURCES = uniconv/test-u16-conv-to-enc.c @@ -7590,6 +8275,12 @@ test_decdigit_SOURCES = unictype/test-decdigit.c test_decdigit_LDADD = $(LDADD) $(LIBUNISTRING) test_digit_SOURCES = unictype/test-digit.c test_digit_LDADD = $(LDADD) $(LIBUNISTRING) +test_incb_byname_SOURCES = unictype/test-incb_byname.c +test_incb_byname_LDADD = $(LDADD) $(LIBUNISTRING) +test_incb_name_SOURCES = unictype/test-incb_name.c +test_incb_name_LDADD = $(LDADD) $(LIBUNISTRING) +test_incb_of_SOURCES = unictype/test-incb_of.c +test_incb_of_LDADD = $(LDADD) $(LIBUNISTRING) test_joininggroup_byname_SOURCES = unictype/test-joininggroup_byname.c test_joininggroup_byname_LDADD = $(LDADD) $(LIBUNISTRING) test_joininggroup_name_SOURCES = unictype/test-joininggroup_name.c @@ -7704,6 +8395,10 @@ test_pr_hex_digit_SOURCES = unictype/test-pr_hex_digit.c test_pr_hex_digit_LDADD = $(LDADD) $(LIBUNISTRING) test_pr_hyphen_SOURCES = unictype/test-pr_hyphen.c test_pr_hyphen_LDADD = $(LDADD) $(LIBUNISTRING) +test_pr_id_compat_math_continue_SOURCES = unictype/test-pr_id_compat_math_continue.c +test_pr_id_compat_math_continue_LDADD = $(LDADD) $(LIBUNISTRING) +test_pr_id_compat_math_start_SOURCES = unictype/test-pr_id_compat_math_start.c +test_pr_id_compat_math_start_LDADD = $(LDADD) $(LIBUNISTRING) test_pr_id_continue_SOURCES = unictype/test-pr_id_continue.c test_pr_id_continue_LDADD = $(LDADD) $(LIBUNISTRING) test_pr_id_start_SOURCES = unictype/test-pr_id_start.c @@ -7714,6 +8409,8 @@ test_pr_ids_binary_operator_SOURCES = unictype/test-pr_ids_binary_operator.c test_pr_ids_binary_operator_LDADD = $(LDADD) $(LIBUNISTRING) test_pr_ids_trinary_operator_SOURCES = unictype/test-pr_ids_trinary_operator.c test_pr_ids_trinary_operator_LDADD = $(LDADD) $(LIBUNISTRING) +test_pr_ids_unary_operator_SOURCES = unictype/test-pr_ids_unary_operator.c +test_pr_ids_unary_operator_LDADD = $(LDADD) $(LIBUNISTRING) test_pr_ignorable_control_SOURCES = unictype/test-pr_ignorable_control.c test_pr_ignorable_control_LDADD = $(LDADD) $(LIBUNISTRING) test_pr_iso_control_SOURCES = unictype/test-pr_iso_control.c @@ -7760,6 +8457,8 @@ test_pr_pattern_syntax_SOURCES = unictype/test-pr_pattern_syntax.c test_pr_pattern_syntax_LDADD = $(LDADD) $(LIBUNISTRING) test_pr_pattern_white_space_SOURCES = unictype/test-pr_pattern_white_space.c test_pr_pattern_white_space_LDADD = $(LDADD) $(LIBUNISTRING) +test_pr_prepended_concatenation_mark_SOURCES = unictype/test-pr_prepended_concatenation_mark.c +test_pr_prepended_concatenation_mark_LDADD = $(LDADD) $(LIBUNISTRING) test_pr_private_use_SOURCES = unictype/test-pr_private_use.c test_pr_private_use_LDADD = $(LDADD) $(LIBUNISTRING) test_pr_punctuation_SOURCES = unictype/test-pr_punctuation.c @@ -7833,7 +8532,7 @@ test_uc_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING) test_uc_is_grapheme_break_SOURCES = unigbrk/test-uc-is-grapheme-break.c test_uc_is_grapheme_break_LDADD = $(LDADD) $(LIBUNISTRING) test_ulc_grapheme_breaks_SOURCES = unigbrk/test-ulc-grapheme-breaks.c -test_ulc_grapheme_breaks_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_grapheme_breaks_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u16_possible_linebreaks_SOURCES = unilbrk/test-u16-possible-linebreaks.c test_u16_possible_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) test_u16_width_linebreaks_SOURCES = unilbrk/test-u16-width-linebreaks.c @@ -7850,6 +8549,8 @@ test_ulc_possible_linebreaks_SOURCES = unilbrk/test-ulc-possible-linebreaks.c test_ulc_possible_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_ulc_width_linebreaks_SOURCES = unilbrk/test-ulc-width-linebreaks.c test_ulc_width_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ +test_u_version_SOURCES = unimetadata/test-u-version.c +test_u_version_LDADD = $(LDADD) $(LIBUNISTRING) @LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@test_uninames_SOURCES = uniname/test-uninames.c @LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@test_uninames_LDADD = $(LDADD) @LIBINTL@ test_canonical_decomposition_SOURCES = uninorm/test-canonical-decomposition.c @@ -7929,9 +8630,9 @@ test_u16_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u16_vasnprintf1_SOURCES = unistdio/test-u16-vasnprintf1.c test_u16_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u16_vasnprintf2_SOURCES = unistdio/test-u16-vasnprintf2.c -test_u16_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u16_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u16_vasnprintf3_SOURCES = unistdio/test-u16-vasnprintf3.c -test_u16_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u16_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u16_vasprintf1_SOURCES = unistdio/test-u16-vasprintf1.c test_u16_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u16_vsnprintf1_SOURCES = unistdio/test-u16-vsnprintf1.c @@ -7943,9 +8644,9 @@ test_u32_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u32_vasnprintf1_SOURCES = unistdio/test-u32-vasnprintf1.c test_u32_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u32_vasnprintf2_SOURCES = unistdio/test-u32-vasnprintf2.c -test_u32_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u32_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u32_vasnprintf3_SOURCES = unistdio/test-u32-vasnprintf3.c -test_u32_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u32_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u32_vasprintf1_SOURCES = unistdio/test-u32-vasprintf1.c test_u32_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u32_vsnprintf1_SOURCES = unistdio/test-u32-vsnprintf1.c @@ -7957,9 +8658,9 @@ test_u8_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u8_vasnprintf1_SOURCES = unistdio/test-u8-vasnprintf1.c test_u8_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u8_vasnprintf2_SOURCES = unistdio/test-u8-vasnprintf2.c -test_u8_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u8_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u8_vasnprintf3_SOURCES = unistdio/test-u8-vasnprintf3.c -test_u8_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u8_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u8_vasprintf1_SOURCES = unistdio/test-u8-vasprintf1.c test_u8_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_u8_vsnprintf1_SOURCES = unistdio/test-u8-vsnprintf1.c @@ -7967,19 +8668,19 @@ test_u8_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ test_u8_vsprintf1_SOURCES = unistdio/test-u8-vsprintf1.c test_u8_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ test_ulc_asnprintf1_SOURCES = unistdio/test-ulc-asnprintf1.c -test_ulc_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) test_ulc_vasnprintf1_SOURCES = unistdio/test-ulc-vasnprintf1.c -test_ulc_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) test_ulc_vasnprintf2_SOURCES = unistdio/test-ulc-vasnprintf2.c -test_ulc_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) test_ulc_vasnprintf3_SOURCES = unistdio/test-ulc-vasnprintf3.c -test_ulc_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) test_ulc_vasprintf1_SOURCES = unistdio/test-ulc-vasprintf1.c -test_ulc_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB) test_ulc_vsnprintf1_SOURCES = unistdio/test-ulc-vsnprintf1.c -test_ulc_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(MBRTOWC_LIB) test_ulc_vsprintf1_SOURCES = unistdio/test-ulc-vsprintf1.c -test_ulc_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(MBRTOWC_LIB) test_u16_check_SOURCES = unistr/test-u16-check.c test_u16_check_LDADD = $(LDADD) $(LIBUNISTRING) test_u16_chr_SOURCES = unistr/test-u16-chr.c @@ -8006,6 +8707,8 @@ test_u16_move_SOURCES = unistr/test-u16-move.c test_u16_move_LDADD = $(LDADD) $(LIBUNISTRING) test_u16_next_SOURCES = unistr/test-u16-next.c test_u16_next_LDADD = $(LDADD) $(LIBUNISTRING) +test_u16_pcpy_SOURCES = unistr/test-u16-pcpy.c +test_u16_pcpy_LDADD = $(LDADD) $(LIBUNISTRING) test_u16_prev_SOURCES = unistr/test-u16-prev.c test_u16_prev_LDADD = $(LDADD) $(LIBUNISTRING) test_u16_set_SOURCES = unistr/test-u16-set.c @@ -8076,6 +8779,8 @@ test_u32_move_SOURCES = unistr/test-u32-move.c test_u32_move_LDADD = $(LDADD) $(LIBUNISTRING) test_u32_next_SOURCES = unistr/test-u32-next.c test_u32_next_LDADD = $(LDADD) $(LIBUNISTRING) +test_u32_pcpy_SOURCES = unistr/test-u32-pcpy.c +test_u32_pcpy_LDADD = $(LDADD) $(LIBUNISTRING) test_u32_prev_SOURCES = unistr/test-u32-prev.c test_u32_prev_LDADD = $(LDADD) $(LIBUNISTRING) test_u32_set_SOURCES = unistr/test-u32-set.c @@ -8146,6 +8851,8 @@ test_u8_move_SOURCES = unistr/test-u8-move.c test_u8_move_LDADD = $(LDADD) $(LIBUNISTRING) test_u8_next_SOURCES = unistr/test-u8-next.c test_u8_next_LDADD = $(LDADD) $(LIBUNISTRING) +test_u8_pcpy_SOURCES = unistr/test-u8-pcpy.c +test_u8_pcpy_LDADD = $(LDADD) $(LIBUNISTRING) test_u8_prev_SOURCES = unistr/test-u8-prev.c test_u8_prev_LDADD = $(LDADD) $(LIBUNISTRING) test_u8_set_SOURCES = unistr/test-u8-set.c @@ -8199,7 +8906,7 @@ test_uc_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING) test_u8_wordbreaks_SOURCES = uniwbrk/test-u8-wordbreaks.c test_u8_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING) test_ulc_wordbreaks_SOURCES = uniwbrk/test-ulc-wordbreaks.c -test_ulc_wordbreaks_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_wordbreaks_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ test_u16_strwidth_SOURCES = uniwidth/test-u16-strwidth.c test_u16_strwidth_LDADD = $(LDADD) $(LIBUNISTRING) test_u16_width_SOURCES = uniwidth/test-u16-width.c @@ -8216,8 +8923,8 @@ test_uc_width_SOURCES = uniwidth/test-uc_width.c test_uc_width_LDADD = $(LDADD) $(LIBUNISTRING) test_uc_width2_SOURCES = uniwidth/test-uc_width2.c test_uc_width2_LDADD = $(LDADD) $(LIBUNISTRING) -test_wcrtomb_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_wcwidth_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) +test_wcrtomb_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_wcwidth_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) test_xalloc_die_LDADD = $(LDADD) @LIBINTL@ # Ensure that ../lib/config.h is seen before ../config.h. @@ -8310,6 +9017,10 @@ test-accept$(EXEEXT): $(test_accept_OBJECTS) $(test_accept_DEPENDENCIES) $(EXTRA @rm -f test-accept$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_accept_OBJECTS) $(test_accept_LDADD) $(LIBS) +test-alignasof$(EXEEXT): $(test_alignasof_OBJECTS) $(test_alignasof_DEPENDENCIES) $(EXTRA_test_alignasof_DEPENDENCIES) + @rm -f test-alignasof$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_alignasof_OBJECTS) $(test_alignasof_LDADD) $(LIBS) + test-alloca-opt$(EXEEXT): $(test_alloca_opt_OBJECTS) $(test_alloca_opt_DEPENDENCIES) $(EXTRA_test_alloca_opt_DEPENDENCIES) @rm -f test-alloca-opt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_alloca_opt_OBJECTS) $(test_alloca_opt_LDADD) $(LIBS) @@ -8388,6 +9099,10 @@ test-block_test$(EXEEXT): $(test_block_test_OBJECTS) $(test_block_test_DEPENDENC @rm -f test-block_test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_block_test_OBJECTS) $(test_block_test_LDADD) $(LIBS) +test-btoc32$(EXEEXT): $(test_btoc32_OBJECTS) $(test_btoc32_DEPENDENCIES) $(EXTRA_test_btoc32_DEPENDENCIES) + @rm -f test-btoc32$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_btoc32_OBJECTS) $(test_btoc32_LDADD) $(LIBS) + test-btowc$(EXEEXT): $(test_btowc_OBJECTS) $(test_btowc_DEPENDENCIES) $(EXTRA_test_btowc_DEPENDENCIES) @rm -f test-btowc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_btowc_OBJECTS) $(test_btowc_LDADD) $(LIBS) @@ -8404,6 +9119,70 @@ test-c-strncasecmp$(EXEEXT): $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_ @rm -f test-c-strncasecmp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_LDADD) $(LIBS) +test-c32isalnum$(EXEEXT): $(test_c32isalnum_OBJECTS) $(test_c32isalnum_DEPENDENCIES) $(EXTRA_test_c32isalnum_DEPENDENCIES) + @rm -f test-c32isalnum$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32isalnum_OBJECTS) $(test_c32isalnum_LDADD) $(LIBS) + +test-c32isalpha$(EXEEXT): $(test_c32isalpha_OBJECTS) $(test_c32isalpha_DEPENDENCIES) $(EXTRA_test_c32isalpha_DEPENDENCIES) + @rm -f test-c32isalpha$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32isalpha_OBJECTS) $(test_c32isalpha_LDADD) $(LIBS) + +test-c32isblank$(EXEEXT): $(test_c32isblank_OBJECTS) $(test_c32isblank_DEPENDENCIES) $(EXTRA_test_c32isblank_DEPENDENCIES) + @rm -f test-c32isblank$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32isblank_OBJECTS) $(test_c32isblank_LDADD) $(LIBS) + +test-c32iscntrl$(EXEEXT): $(test_c32iscntrl_OBJECTS) $(test_c32iscntrl_DEPENDENCIES) $(EXTRA_test_c32iscntrl_DEPENDENCIES) + @rm -f test-c32iscntrl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32iscntrl_OBJECTS) $(test_c32iscntrl_LDADD) $(LIBS) + +test-c32isdigit$(EXEEXT): $(test_c32isdigit_OBJECTS) $(test_c32isdigit_DEPENDENCIES) $(EXTRA_test_c32isdigit_DEPENDENCIES) + @rm -f test-c32isdigit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32isdigit_OBJECTS) $(test_c32isdigit_LDADD) $(LIBS) + +test-c32isgraph$(EXEEXT): $(test_c32isgraph_OBJECTS) $(test_c32isgraph_DEPENDENCIES) $(EXTRA_test_c32isgraph_DEPENDENCIES) + @rm -f test-c32isgraph$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32isgraph_OBJECTS) $(test_c32isgraph_LDADD) $(LIBS) + +test-c32islower$(EXEEXT): $(test_c32islower_OBJECTS) $(test_c32islower_DEPENDENCIES) $(EXTRA_test_c32islower_DEPENDENCIES) + @rm -f test-c32islower$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32islower_OBJECTS) $(test_c32islower_LDADD) $(LIBS) + +test-c32isprint$(EXEEXT): $(test_c32isprint_OBJECTS) $(test_c32isprint_DEPENDENCIES) $(EXTRA_test_c32isprint_DEPENDENCIES) + @rm -f test-c32isprint$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32isprint_OBJECTS) $(test_c32isprint_LDADD) $(LIBS) + +test-c32ispunct$(EXEEXT): $(test_c32ispunct_OBJECTS) $(test_c32ispunct_DEPENDENCIES) $(EXTRA_test_c32ispunct_DEPENDENCIES) + @rm -f test-c32ispunct$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32ispunct_OBJECTS) $(test_c32ispunct_LDADD) $(LIBS) + +test-c32isspace$(EXEEXT): $(test_c32isspace_OBJECTS) $(test_c32isspace_DEPENDENCIES) $(EXTRA_test_c32isspace_DEPENDENCIES) + @rm -f test-c32isspace$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32isspace_OBJECTS) $(test_c32isspace_LDADD) $(LIBS) + +test-c32isupper$(EXEEXT): $(test_c32isupper_OBJECTS) $(test_c32isupper_DEPENDENCIES) $(EXTRA_test_c32isupper_DEPENDENCIES) + @rm -f test-c32isupper$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32isupper_OBJECTS) $(test_c32isupper_LDADD) $(LIBS) + +test-c32isxdigit$(EXEEXT): $(test_c32isxdigit_OBJECTS) $(test_c32isxdigit_DEPENDENCIES) $(EXTRA_test_c32isxdigit_DEPENDENCIES) + @rm -f test-c32isxdigit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32isxdigit_OBJECTS) $(test_c32isxdigit_LDADD) $(LIBS) + +test-c32rtomb$(EXEEXT): $(test_c32rtomb_OBJECTS) $(test_c32rtomb_DEPENDENCIES) $(EXTRA_test_c32rtomb_DEPENDENCIES) + @rm -f test-c32rtomb$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32rtomb_OBJECTS) $(test_c32rtomb_LDADD) $(LIBS) + +test-c32rtomb-w32$(EXEEXT): $(test_c32rtomb_w32_OBJECTS) $(test_c32rtomb_w32_DEPENDENCIES) $(EXTRA_test_c32rtomb_w32_DEPENDENCIES) + @rm -f test-c32rtomb-w32$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32rtomb_w32_OBJECTS) $(test_c32rtomb_w32_LDADD) $(LIBS) + +test-c32tolower$(EXEEXT): $(test_c32tolower_OBJECTS) $(test_c32tolower_DEPENDENCIES) $(EXTRA_test_c32tolower_DEPENDENCIES) + @rm -f test-c32tolower$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32tolower_OBJECTS) $(test_c32tolower_LDADD) $(LIBS) + +test-c32width$(EXEEXT): $(test_c32width_OBJECTS) $(test_c32width_DEPENDENCIES) $(EXTRA_test_c32width_DEPENDENCIES) + @rm -f test-c32width$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c32width_OBJECTS) $(test_c32width_LDADD) $(LIBS) + test-calloc-gnu$(EXEEXT): $(test_calloc_gnu_OBJECTS) $(test_calloc_gnu_DEPENDENCIES) $(EXTRA_test_calloc_gnu_DEPENDENCIES) @rm -f test-calloc-gnu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_calloc_gnu_OBJECTS) $(test_calloc_gnu_LDADD) $(LIBS) @@ -8874,6 +9653,10 @@ test-errno$(EXEEXT): $(test_errno_OBJECTS) $(test_errno_DEPENDENCIES) $(EXTRA_te @rm -f test-errno$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_errno_OBJECTS) $(test_errno_LDADD) $(LIBS) +test-error$(EXEEXT): $(test_error_OBJECTS) $(test_error_DEPENDENCIES) $(EXTRA_test_error_DEPENDENCIES) + @rm -f test-error$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_error_OBJECTS) $(test_error_LDADD) $(LIBS) + test-fcntl$(EXEEXT): $(test_fcntl_OBJECTS) $(test_fcntl_DEPENDENCIES) $(EXTRA_test_fcntl_DEPENDENCIES) @rm -f test-fcntl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fcntl_OBJECTS) $(test_fcntl_LDADD) $(LIBS) @@ -8967,6 +9750,24 @@ test-ignorable$(EXEEXT): $(test_ignorable_OBJECTS) $(test_ignorable_DEPENDENCIES test-ignore-value$(EXEEXT): $(test_ignore_value_OBJECTS) $(test_ignore_value_DEPENDENCIES) $(EXTRA_test_ignore_value_DEPENDENCIES) @rm -f test-ignore-value$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ignore_value_OBJECTS) $(test_ignore_value_LDADD) $(LIBS) +unictype/test-incb_byname.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) + +test-incb_byname$(EXEEXT): $(test_incb_byname_OBJECTS) $(test_incb_byname_DEPENDENCIES) $(EXTRA_test_incb_byname_DEPENDENCIES) + @rm -f test-incb_byname$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_incb_byname_OBJECTS) $(test_incb_byname_LDADD) $(LIBS) +unictype/test-incb_name.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) + +test-incb_name$(EXEEXT): $(test_incb_name_OBJECTS) $(test_incb_name_DEPENDENCIES) $(EXTRA_test_incb_name_DEPENDENCIES) + @rm -f test-incb_name$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_incb_name_OBJECTS) $(test_incb_name_LDADD) $(LIBS) +unictype/test-incb_of.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) + +test-incb_of$(EXEEXT): $(test_incb_of_OBJECTS) $(test_incb_of_DEPENDENCIES) $(EXTRA_test_incb_of_DEPENDENCIES) + @rm -f test-incb_of$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_incb_of_OBJECTS) $(test_incb_of_LDADD) $(LIBS) test-inet_pton$(EXEEXT): $(test_inet_pton_OBJECTS) $(test_inet_pton_DEPENDENCIES) $(EXTRA_test_inet_pton_DEPENDENCIES) @rm -f test-inet_pton$(EXEEXT) @@ -9008,6 +9809,10 @@ test-iswdigit$(EXEEXT): $(test_iswdigit_OBJECTS) $(test_iswdigit_DEPENDENCIES) $ @rm -f test-iswdigit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_iswdigit_OBJECTS) $(test_iswdigit_LDADD) $(LIBS) +test-iswpunct$(EXEEXT): $(test_iswpunct_OBJECTS) $(test_iswpunct_DEPENDENCIES) $(EXTRA_test_iswpunct_DEPENDENCIES) + @rm -f test-iswpunct$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_iswpunct_OBJECTS) $(test_iswpunct_LDADD) $(LIBS) + test-iswxdigit$(EXEEXT): $(test_iswxdigit_OBJECTS) $(test_iswxdigit_DEPENDENCIES) $(EXTRA_test_iswxdigit_DEPENDENCIES) @rm -f test-iswxdigit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_iswxdigit_OBJECTS) $(test_iswxdigit_LDADD) $(LIBS) @@ -9058,6 +9863,10 @@ test-langinfo$(EXEEXT): $(test_langinfo_OBJECTS) $(test_langinfo_DEPENDENCIES) $ @rm -f test-langinfo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_langinfo_OBJECTS) $(test_langinfo_LDADD) $(LIBS) +test-largefile$(EXEEXT): $(test_largefile_OBJECTS) $(test_largefile_DEPENDENCIES) $(EXTRA_test_largefile_DEPENDENCIES) + @rm -f test-largefile$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_largefile_OBJECTS) $(test_largefile_LDADD) $(LIBS) + test-limits-h$(EXEEXT): $(test_limits_h_OBJECTS) $(test_limits_h_DEPENDENCIES) $(EXTRA_test_limits_h_DEPENDENCIES) @rm -f test-limits-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_limits_h_OBJECTS) $(test_limits_h_LDADD) $(LIBS) @@ -9104,6 +9913,14 @@ test-math$(EXEEXT): $(test_math_OBJECTS) $(test_math_DEPENDENCIES) $(EXTRA_test_ @rm -f test-math$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_math_OBJECTS) $(test_math_LDADD) $(LIBS) +test-mbrtoc32$(EXEEXT): $(test_mbrtoc32_OBJECTS) $(test_mbrtoc32_DEPENDENCIES) $(EXTRA_test_mbrtoc32_DEPENDENCIES) + @rm -f test-mbrtoc32$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbrtoc32_OBJECTS) $(test_mbrtoc32_LDADD) $(LIBS) + +test-mbrtoc32-w32$(EXEEXT): $(test_mbrtoc32_w32_OBJECTS) $(test_mbrtoc32_w32_DEPENDENCIES) $(EXTRA_test_mbrtoc32_w32_DEPENDENCIES) + @rm -f test-mbrtoc32-w32$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbrtoc32_w32_OBJECTS) $(test_mbrtoc32_w32_LDADD) $(LIBS) + test-mbrtowc$(EXEEXT): $(test_mbrtowc_OBJECTS) $(test_mbrtowc_DEPENDENCIES) $(EXTRA_test_mbrtowc_DEPENDENCIES) @rm -f test-mbrtowc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbrtowc_OBJECTS) $(test_mbrtowc_LDADD) $(LIBS) @@ -9503,6 +10320,18 @@ unictype/test-pr_hyphen.$(OBJEXT): unictype/$(am__dirstamp) \ test-pr_hyphen$(EXEEXT): $(test_pr_hyphen_OBJECTS) $(test_pr_hyphen_DEPENDENCIES) $(EXTRA_test_pr_hyphen_DEPENDENCIES) @rm -f test-pr_hyphen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pr_hyphen_OBJECTS) $(test_pr_hyphen_LDADD) $(LIBS) +unictype/test-pr_id_compat_math_continue.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) + +test-pr_id_compat_math_continue$(EXEEXT): $(test_pr_id_compat_math_continue_OBJECTS) $(test_pr_id_compat_math_continue_DEPENDENCIES) $(EXTRA_test_pr_id_compat_math_continue_DEPENDENCIES) + @rm -f test-pr_id_compat_math_continue$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_id_compat_math_continue_OBJECTS) $(test_pr_id_compat_math_continue_LDADD) $(LIBS) +unictype/test-pr_id_compat_math_start.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) + +test-pr_id_compat_math_start$(EXEEXT): $(test_pr_id_compat_math_start_OBJECTS) $(test_pr_id_compat_math_start_DEPENDENCIES) $(EXTRA_test_pr_id_compat_math_start_DEPENDENCIES) + @rm -f test-pr_id_compat_math_start$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_id_compat_math_start_OBJECTS) $(test_pr_id_compat_math_start_LDADD) $(LIBS) unictype/test-pr_id_continue.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) @@ -9533,6 +10362,12 @@ unictype/test-pr_ids_trinary_operator.$(OBJEXT): \ test-pr_ids_trinary_operator$(EXEEXT): $(test_pr_ids_trinary_operator_OBJECTS) $(test_pr_ids_trinary_operator_DEPENDENCIES) $(EXTRA_test_pr_ids_trinary_operator_DEPENDENCIES) @rm -f test-pr_ids_trinary_operator$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pr_ids_trinary_operator_OBJECTS) $(test_pr_ids_trinary_operator_LDADD) $(LIBS) +unictype/test-pr_ids_unary_operator.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) + +test-pr_ids_unary_operator$(EXEEXT): $(test_pr_ids_unary_operator_OBJECTS) $(test_pr_ids_unary_operator_DEPENDENCIES) $(EXTRA_test_pr_ids_unary_operator_DEPENDENCIES) + @rm -f test-pr_ids_unary_operator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_ids_unary_operator_OBJECTS) $(test_pr_ids_unary_operator_LDADD) $(LIBS) unictype/test-pr_ignorable_control.$(OBJEXT): \ unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) @@ -9671,6 +10506,12 @@ unictype/test-pr_pattern_white_space.$(OBJEXT): \ test-pr_pattern_white_space$(EXEEXT): $(test_pr_pattern_white_space_OBJECTS) $(test_pr_pattern_white_space_DEPENDENCIES) $(EXTRA_test_pr_pattern_white_space_DEPENDENCIES) @rm -f test-pr_pattern_white_space$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pr_pattern_white_space_OBJECTS) $(test_pr_pattern_white_space_LDADD) $(LIBS) +unictype/test-pr_prepended_concatenation_mark.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) + +test-pr_prepended_concatenation_mark$(EXEEXT): $(test_pr_prepended_concatenation_mark_OBJECTS) $(test_pr_prepended_concatenation_mark_DEPENDENCIES) $(EXTRA_test_pr_prepended_concatenation_mark_DEPENDENCIES) + @rm -f test-pr_prepended_concatenation_mark$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_prepended_concatenation_mark_OBJECTS) $(test_pr_prepended_concatenation_mark_LDADD) $(LIBS) unictype/test-pr_private_use.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) @@ -9818,6 +10659,18 @@ test-raise$(EXEEXT): $(test_raise_OBJECTS) $(test_raise_DEPENDENCIES) $(EXTRA_te @rm -f test-raise$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_raise_OBJECTS) $(test_raise_LDADD) $(LIBS) +test-random$(EXEEXT): $(test_random_OBJECTS) $(test_random_DEPENDENCIES) $(EXTRA_test_random_DEPENDENCIES) + @rm -f test-random$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_random_OBJECTS) $(test_random_LDADD) $(LIBS) + +test-random-mt$(EXEEXT): $(test_random_mt_OBJECTS) $(test_random_mt_DEPENDENCIES) $(EXTRA_test_random_mt_DEPENDENCIES) + @rm -f test-random-mt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_random_mt_OBJECTS) $(test_random_mt_LDADD) $(LIBS) + +test-random_r$(EXEEXT): $(test_random_r_OBJECTS) $(test_random_r_DEPENDENCIES) $(EXTRA_test_random_r_DEPENDENCIES) + @rm -f test-random_r$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_random_r_OBJECTS) $(test_random_r_LDADD) $(LIBS) + test-realloc-gnu$(EXEEXT): $(test_realloc_gnu_OBJECTS) $(test_realloc_gnu_DEPENDENCIES) $(EXTRA_test_realloc_gnu_DEPENDENCIES) @rm -f test-realloc-gnu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_realloc_gnu_OBJECTS) $(test_realloc_gnu_LDADD) $(LIBS) @@ -9876,6 +10729,10 @@ test-setlocale_null-mt-one$(EXEEXT): $(test_setlocale_null_mt_one_OBJECTS) $(tes @rm -f test-setlocale_null-mt-one$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setlocale_null_mt_one_OBJECTS) $(test_setlocale_null_mt_one_LDADD) $(LIBS) +test-setlocale_null-unlocked$(EXEEXT): $(test_setlocale_null_unlocked_OBJECTS) $(test_setlocale_null_unlocked_DEPENDENCIES) $(EXTRA_test_setlocale_null_unlocked_DEPENDENCIES) + @rm -f test-setlocale_null-unlocked$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_setlocale_null_unlocked_OBJECTS) $(test_setlocale_null_unlocked_LDADD) $(LIBS) + test-setsockopt$(EXEEXT): $(test_setsockopt_OBJECTS) $(test_setsockopt_DEPENDENCIES) $(EXTRA_test_setsockopt_DEPENDENCIES) @rm -f test-setsockopt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setsockopt_OBJECTS) $(test_setsockopt_LDADD) $(LIBS) @@ -9908,10 +10765,6 @@ test-stat-time$(EXEEXT): $(test_stat_time_OBJECTS) $(test_stat_time_DEPENDENCIES @rm -f test-stat-time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stat_time_OBJECTS) $(test_stat_time_LDADD) $(LIBS) -test-stdalign$(EXEEXT): $(test_stdalign_OBJECTS) $(test_stdalign_DEPENDENCIES) $(EXTRA_test_stdalign_DEPENDENCIES) - @rm -f test-stdalign$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(test_stdalign_OBJECTS) $(test_stdalign_LDADD) $(LIBS) - test-stdbool$(EXEEXT): $(test_stdbool_OBJECTS) $(test_stdbool_DEPENDENCIES) $(EXTRA_test_stdbool_DEPENDENCIES) @rm -f test-stdbool$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdbool_OBJECTS) $(test_stdbool_LDADD) $(LIBS) @@ -10031,6 +10884,22 @@ test-thread_self$(EXEEXT): $(test_thread_self_OBJECTS) $(test_thread_self_DEPEND test-time$(EXEEXT): $(test_time_OBJECTS) $(test_time_DEPENDENCIES) $(EXTRA_test_time_DEPENDENCIES) @rm -f test-time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_time_OBJECTS) $(test_time_LDADD) $(LIBS) + +test-time-h$(EXEEXT): $(test_time_h_OBJECTS) $(test_time_h_DEPENDENCIES) $(EXTRA_test_time_h_DEPENDENCIES) + @rm -f test-time-h$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_time_h_OBJECTS) $(test_time_h_LDADD) $(LIBS) +unimetadata/$(am__dirstamp): + @$(MKDIR_P) unimetadata + @: > unimetadata/$(am__dirstamp) +unimetadata/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) unimetadata/$(DEPDIR) + @: > unimetadata/$(DEPDIR)/$(am__dirstamp) +unimetadata/test-u-version.$(OBJEXT): unimetadata/$(am__dirstamp) \ + unimetadata/$(DEPDIR)/$(am__dirstamp) + +test-u-version$(EXEEXT): $(test_u_version_OBJECTS) $(test_u_version_DEPENDENCIES) $(EXTRA_test_u_version_DEPENDENCIES) + @rm -f test-u-version$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u_version_OBJECTS) $(test_u_version_LDADD) $(LIBS) unistdio/$(am__dirstamp): @$(MKDIR_P) unistdio @: > unistdio/$(am__dirstamp) @@ -10229,6 +11098,12 @@ uninorm/test-u16-normcoll.$(OBJEXT): uninorm/$(am__dirstamp) \ test-u16-normcoll$(EXEEXT): $(test_u16_normcoll_OBJECTS) $(test_u16_normcoll_DEPENDENCIES) $(EXTRA_test_u16_normcoll_DEPENDENCIES) @rm -f test-u16-normcoll$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_u16_normcoll_OBJECTS) $(test_u16_normcoll_LDADD) $(LIBS) +unistr/test-u16-pcpy.$(OBJEXT): unistr/$(am__dirstamp) \ + unistr/$(DEPDIR)/$(am__dirstamp) + +test-u16-pcpy$(EXEEXT): $(test_u16_pcpy_OBJECTS) $(test_u16_pcpy_DEPENDENCIES) $(EXTRA_test_u16_pcpy_DEPENDENCIES) + @rm -f test-u16-pcpy$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_pcpy_OBJECTS) $(test_u16_pcpy_LDADD) $(LIBS) unilbrk/$(am__dirstamp): @$(MKDIR_P) unilbrk @: > unilbrk/$(am__dirstamp) @@ -10675,6 +11550,12 @@ uninorm/test-u32-normcoll.$(OBJEXT): uninorm/$(am__dirstamp) \ test-u32-normcoll$(EXEEXT): $(test_u32_normcoll_OBJECTS) $(test_u32_normcoll_DEPENDENCIES) $(EXTRA_test_u32_normcoll_DEPENDENCIES) @rm -f test-u32-normcoll$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_u32_normcoll_OBJECTS) $(test_u32_normcoll_LDADD) $(LIBS) +unistr/test-u32-pcpy.$(OBJEXT): unistr/$(am__dirstamp) \ + unistr/$(DEPDIR)/$(am__dirstamp) + +test-u32-pcpy$(EXEEXT): $(test_u32_pcpy_OBJECTS) $(test_u32_pcpy_DEPENDENCIES) $(EXTRA_test_u32_pcpy_DEPENDENCIES) + @rm -f test-u32-pcpy$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_pcpy_OBJECTS) $(test_u32_pcpy_LDADD) $(LIBS) unilbrk/test-u32-possible-linebreaks.$(OBJEXT): \ unilbrk/$(am__dirstamp) unilbrk/$(DEPDIR)/$(am__dirstamp) @@ -11077,6 +11958,12 @@ uninorm/test-u8-normcoll.$(OBJEXT): uninorm/$(am__dirstamp) \ test-u8-normcoll$(EXEEXT): $(test_u8_normcoll_OBJECTS) $(test_u8_normcoll_DEPENDENCIES) $(EXTRA_test_u8_normcoll_DEPENDENCIES) @rm -f test-u8-normcoll$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_u8_normcoll_OBJECTS) $(test_u8_normcoll_LDADD) $(LIBS) +unistr/test-u8-pcpy.$(OBJEXT): unistr/$(am__dirstamp) \ + unistr/$(DEPDIR)/$(am__dirstamp) + +test-u8-pcpy$(EXEEXT): $(test_u8_pcpy_OBJECTS) $(test_u8_pcpy_DEPENDENCIES) $(EXTRA_test_u8_pcpy_DEPENDENCIES) + @rm -f test-u8-pcpy$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_pcpy_OBJECTS) $(test_u8_pcpy_LDADD) $(LIBS) unilbrk/test-u8-possible-linebreaks.$(OBJEXT): \ unilbrk/$(am__dirstamp) unilbrk/$(DEPDIR)/$(am__dirstamp) @@ -11359,6 +12246,10 @@ uniwidth/test-uc_width2.$(OBJEXT): uniwidth/$(am__dirstamp) \ test-uc_width2$(EXEEXT): $(test_uc_width2_OBJECTS) $(test_uc_width2_DEPENDENCIES) $(EXTRA_test_uc_width2_DEPENDENCIES) @rm -f test-uc_width2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_uc_width2_OBJECTS) $(test_uc_width2_LDADD) $(LIBS) + +test-uchar$(EXEEXT): $(test_uchar_OBJECTS) $(test_uchar_DEPENDENCIES) $(EXTRA_test_uchar_DEPENDENCIES) + @rm -f test-uchar$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uchar_OBJECTS) $(test_uchar_LDADD) $(LIBS) unistdio/test-ulc-asnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ unistdio/$(DEPDIR)/$(am__dirstamp) @@ -11508,6 +12399,7 @@ mostlyclean-compile: -rm -f unictype/*.$(OBJEXT) -rm -f unigbrk/*.$(OBJEXT) -rm -f unilbrk/*.$(OBJEXT) + -rm -f unimetadata/*.$(OBJEXT) -rm -f uniname/*.$(OBJEXT) -rm -f uninorm/*.$(OBJEXT) -rm -f unistdio/*.$(OBJEXT) @@ -11523,7 +12415,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binary-io.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bind.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btoc32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c32rtomb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c32tob.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@ # am--include-marker @@ -11562,10 +12457,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pthread_sigmask.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raise.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random_r.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randomd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randoml.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reallocarray.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/same-inode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched_yield.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@ # am--include-marker @@ -11586,16 +12484,34 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symlink.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-accept.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alignasof.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alloca-opt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-arpa_inet.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-array-mergesort.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-assert.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-binary-io.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bind.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-btoc32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-btowc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-ctype.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strcasecmp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strncasecmp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isalnum.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isalpha.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isblank.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32iscntrl.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isdigit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isgraph.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32islower.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isprint.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32ispunct.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isspace.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isupper.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isxdigit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32rtomb-w32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32rtomb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32tolower.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32width.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-calloc-gnu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cloexec.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-close.Po@am__quote@ # am--include-marker @@ -11604,6 +12520,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dup2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-environ.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-errno.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-error.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fdopen.Po@am__quote@ # am--include-marker @@ -11636,8 +12553,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanl-nolibm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswblank.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswdigit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswpunct.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswxdigit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-langinfo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-largefile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-limits-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-listen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-localcharset.Po@am__quote@ # am--include-marker @@ -11648,6 +12567,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloc-gnu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloca.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-math.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtoc32-w32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtoc32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc-w32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsinit.Po@am__quote@ # am--include-marker @@ -11668,6 +12589,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread_sigmask1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread_sigmask2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-raise.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-random-mt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-random.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-random_r.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-realloc-gnu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-reallocarray.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-rwlock1.Po@am__quote@ # am--include-marker @@ -11680,6 +12604,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null-mt-all.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null-mt-one.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null-unlocked.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setsockopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signal-h.Po@am__quote@ # am--include-marker @@ -11689,7 +12614,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sockets.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat-time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdalign.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdbool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdckdint.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stddef.Po@am__quote@ # am--include-marker @@ -11713,7 +12637,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_uio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-thread_create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-thread_self.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-time-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-time.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-uchar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unistd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unsetenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-usleep.Po@am__quote@ # am--include-marker @@ -11725,6 +12651,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wctype-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcwidth.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-xalloc-die.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usleep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcrtomb.Po@am__quote@ # am--include-marker @@ -11861,6 +12788,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_xdigit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-decdigit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-digit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-incb_byname.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-incb_name.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-incb_of.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-joininggroup_byname.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-joininggroup_name.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-joininggroup_of.Po@am__quote@ # am--include-marker @@ -11918,11 +12848,14 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_grapheme_link.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_hex_digit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_hyphen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_compat_math_continue.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_compat_math_start.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_continue.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_start.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ideographic.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ids_binary_operator.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ids_trinary_operator.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ids_unary_operator.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ignorable_control.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_iso_control.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_join_control.Po@am__quote@ # am--include-marker @@ -11946,6 +12879,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_paragraph_separator.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_pattern_syntax.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_pattern_white_space.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_prepended_concatenation_mark.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_private_use.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_punctuation.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_quotation_mark.Po@am__quote@ # am--include-marker @@ -11991,6 +12925,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-u8-width-linebreaks.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-ulc-possible-linebreaks.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-ulc-width-linebreaks.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unimetadata/$(DEPDIR)/test-u-version.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@uniname/$(DEPDIR)/test-uninames.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-canonical-decomposition.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-compat-decomposition.Po@am__quote@ # am--include-marker @@ -12066,6 +13001,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-mbtoucr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-move.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-next.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-pcpy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-prev.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-set.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-stpcpy.Po@am__quote@ # am--include-marker @@ -12101,6 +13037,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-mbtoucr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-move.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-next.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-pcpy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-prev.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-set.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-stpcpy.Po@am__quote@ # am--include-marker @@ -12136,6 +13073,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-mbtoucr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-move.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-next.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-pcpy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-prev.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-set.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-stpcpy.Po@am__quote@ # am--include-marker @@ -12455,6 +13393,13 @@ test-accept.log: test-accept$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-alignasof.log: test-alignasof$(EXEEXT) + @p='test-alignasof$(EXEEXT)'; \ + b='test-alignasof'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-alloca-opt.log: test-alloca-opt$(EXEEXT) @p='test-alloca-opt$(EXEEXT)'; \ b='test-alloca-opt'; \ @@ -12497,16 +13442,44 @@ test-bind.log: test-bind$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-btowc1.sh.log: test-btowc1.sh - @p='test-btowc1.sh'; \ - b='test-btowc1.sh'; \ +test-btoc32-1.sh.log: test-btoc32-1.sh + @p='test-btoc32-1.sh'; \ + b='test-btoc32-1.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-btoc32-2.sh.log: test-btoc32-2.sh + @p='test-btoc32-2.sh'; \ + b='test-btoc32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-btowc2.sh.log: test-btowc2.sh - @p='test-btowc2.sh'; \ - b='test-btowc2.sh'; \ +test-btoc32-3.sh.log: test-btoc32-3.sh + @p='test-btoc32-3.sh'; \ + b='test-btoc32-3.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-btowc-1.sh.log: test-btowc-1.sh + @p='test-btowc-1.sh'; \ + b='test-btowc-1.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-btowc-2.sh.log: test-btowc-2.sh + @p='test-btowc-2.sh'; \ + b='test-btowc-2.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-btowc-3.sh.log: test-btowc-3.sh + @p='test-btowc-3.sh'; \ + b='test-btowc-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ @@ -12525,6 +13498,160 @@ test-c-strcase.sh.log: test-c-strcase.sh --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isalnum.sh.log: test-c32isalnum.sh + @p='test-c32isalnum.sh'; \ + b='test-c32isalnum.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isalpha.sh.log: test-c32isalpha.sh + @p='test-c32isalpha.sh'; \ + b='test-c32isalpha.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isblank.sh.log: test-c32isblank.sh + @p='test-c32isblank.sh'; \ + b='test-c32isblank.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32iscntrl.sh.log: test-c32iscntrl.sh + @p='test-c32iscntrl.sh'; \ + b='test-c32iscntrl.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isdigit.sh.log: test-c32isdigit.sh + @p='test-c32isdigit.sh'; \ + b='test-c32isdigit.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isgraph.sh.log: test-c32isgraph.sh + @p='test-c32isgraph.sh'; \ + b='test-c32isgraph.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32islower.sh.log: test-c32islower.sh + @p='test-c32islower.sh'; \ + b='test-c32islower.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isprint.sh.log: test-c32isprint.sh + @p='test-c32isprint.sh'; \ + b='test-c32isprint.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32ispunct.sh.log: test-c32ispunct.sh + @p='test-c32ispunct.sh'; \ + b='test-c32ispunct.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isspace.sh.log: test-c32isspace.sh + @p='test-c32isspace.sh'; \ + b='test-c32isspace.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isupper.sh.log: test-c32isupper.sh + @p='test-c32isupper.sh'; \ + b='test-c32isupper.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isxdigit.sh.log: test-c32isxdigit.sh + @p='test-c32isxdigit.sh'; \ + b='test-c32isxdigit.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb.sh.log: test-c32rtomb.sh + @p='test-c32rtomb.sh'; \ + b='test-c32rtomb.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-2.sh.log: test-c32rtomb-w32-2.sh + @p='test-c32rtomb-w32-2.sh'; \ + b='test-c32rtomb-w32-2.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-3.sh.log: test-c32rtomb-w32-3.sh + @p='test-c32rtomb-w32-3.sh'; \ + b='test-c32rtomb-w32-3.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-4.sh.log: test-c32rtomb-w32-4.sh + @p='test-c32rtomb-w32-4.sh'; \ + b='test-c32rtomb-w32-4.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-5.sh.log: test-c32rtomb-w32-5.sh + @p='test-c32rtomb-w32-5.sh'; \ + b='test-c32rtomb-w32-5.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-6.sh.log: test-c32rtomb-w32-6.sh + @p='test-c32rtomb-w32-6.sh'; \ + b='test-c32rtomb-w32-6.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-7.sh.log: test-c32rtomb-w32-7.sh + @p='test-c32rtomb-w32-7.sh'; \ + b='test-c32rtomb-w32-7.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-8.sh.log: test-c32rtomb-w32-8.sh + @p='test-c32rtomb-w32-8.sh'; \ + b='test-c32rtomb-w32-8.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32tolower.sh.log: test-c32tolower.sh + @p='test-c32tolower.sh'; \ + b='test-c32tolower.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32width.log: test-c32width$(EXEEXT) + @p='test-c32width$(EXEEXT)'; \ + b='test-c32width'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-calloc-gnu.log: test-calloc-gnu$(EXEEXT) @p='test-calloc-gnu$(EXEEXT)'; \ b='test-calloc-gnu'; \ @@ -12581,6 +13708,13 @@ test-errno.log: test-errno$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-error.sh.log: test-error.sh + @p='test-error.sh'; \ + b='test-error.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-fcntl-h.log: test-fcntl-h$(EXEEXT) @p='test-fcntl-h$(EXEEXT)'; \ b='test-fcntl-h'; \ @@ -12805,6 +13939,13 @@ test-iswdigit.sh.log: test-iswdigit.sh --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-iswpunct.sh.log: test-iswpunct.sh + @p='test-iswpunct.sh'; \ + b='test-iswpunct.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-iswxdigit.sh.log: test-iswxdigit.sh @p='test-iswxdigit.sh'; \ b='test-iswxdigit.sh'; \ @@ -12819,6 +13960,13 @@ test-langinfo.log: test-langinfo$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-largefile.log: test-largefile$(EXEEXT) + @p='test-largefile$(EXEEXT)'; \ + b='test-largefile'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-limits-h.log: test-limits-h$(EXEEXT) @p='test-limits-h$(EXEEXT)'; \ b='test-limits-h'; \ @@ -12903,44 +14051,121 @@ test-math.log: test-math$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc1.sh.log: test-mbrtowc1.sh - @p='test-mbrtowc1.sh'; \ - b='test-mbrtowc1.sh'; \ +test-mbrtoc32-1.sh.log: test-mbrtoc32-1.sh + @p='test-mbrtoc32-1.sh'; \ + b='test-mbrtoc32-1.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-2.sh.log: test-mbrtoc32-2.sh + @p='test-mbrtoc32-2.sh'; \ + b='test-mbrtoc32-2.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-3.sh.log: test-mbrtoc32-3.sh + @p='test-mbrtoc32-3.sh'; \ + b='test-mbrtoc32-3.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-4.sh.log: test-mbrtoc32-4.sh + @p='test-mbrtoc32-4.sh'; \ + b='test-mbrtoc32-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc2.sh.log: test-mbrtowc2.sh - @p='test-mbrtowc2.sh'; \ - b='test-mbrtowc2.sh'; \ +test-mbrtoc32-5.sh.log: test-mbrtoc32-5.sh + @p='test-mbrtoc32-5.sh'; \ + b='test-mbrtoc32-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc3.sh.log: test-mbrtowc3.sh - @p='test-mbrtowc3.sh'; \ - b='test-mbrtowc3.sh'; \ +test-mbrtoc32-w32-2.sh.log: test-mbrtoc32-w32-2.sh + @p='test-mbrtoc32-w32-2.sh'; \ + b='test-mbrtoc32-w32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc4.sh.log: test-mbrtowc4.sh - @p='test-mbrtowc4.sh'; \ - b='test-mbrtowc4.sh'; \ +test-mbrtoc32-w32-3.sh.log: test-mbrtoc32-w32-3.sh + @p='test-mbrtoc32-w32-3.sh'; \ + b='test-mbrtoc32-w32-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc5.sh.log: test-mbrtowc5.sh - @p='test-mbrtowc5.sh'; \ - b='test-mbrtowc5.sh'; \ +test-mbrtoc32-w32-4.sh.log: test-mbrtoc32-w32-4.sh + @p='test-mbrtoc32-w32-4.sh'; \ + b='test-mbrtoc32-w32-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc-w32-1.sh.log: test-mbrtowc-w32-1.sh - @p='test-mbrtowc-w32-1.sh'; \ - b='test-mbrtowc-w32-1.sh'; \ +test-mbrtoc32-w32-5.sh.log: test-mbrtoc32-w32-5.sh + @p='test-mbrtoc32-w32-5.sh'; \ + b='test-mbrtoc32-w32-5.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-w32-6.sh.log: test-mbrtoc32-w32-6.sh + @p='test-mbrtoc32-w32-6.sh'; \ + b='test-mbrtoc32-w32-6.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-w32-7.sh.log: test-mbrtoc32-w32-7.sh + @p='test-mbrtoc32-w32-7.sh'; \ + b='test-mbrtoc32-w32-7.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-w32-8.sh.log: test-mbrtoc32-w32-8.sh + @p='test-mbrtoc32-w32-8.sh'; \ + b='test-mbrtoc32-w32-8.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-1.sh.log: test-mbrtowc-1.sh + @p='test-mbrtowc-1.sh'; \ + b='test-mbrtowc-1.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-2.sh.log: test-mbrtowc-2.sh + @p='test-mbrtowc-2.sh'; \ + b='test-mbrtowc-2.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-3.sh.log: test-mbrtowc-3.sh + @p='test-mbrtowc-3.sh'; \ + b='test-mbrtowc-3.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-4.sh.log: test-mbrtowc-4.sh + @p='test-mbrtowc-4.sh'; \ + b='test-mbrtowc-4.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-5.sh.log: test-mbrtowc-5.sh + @p='test-mbrtowc-5.sh'; \ + b='test-mbrtowc-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ @@ -12987,6 +14212,13 @@ test-mbrtowc-w32-7.sh.log: test-mbrtowc-w32-7.sh --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-w32-8.sh.log: test-mbrtowc-w32-8.sh + @p='test-mbrtowc-w32-8.sh'; \ + b='test-mbrtowc-w32-8.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbsinit.sh.log: test-mbsinit.sh @p='test-mbsinit.sh'; \ b='test-mbsinit.sh'; \ @@ -13106,6 +14338,27 @@ test-raise.log: test-raise$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-random.log: test-random$(EXEEXT) + @p='test-random$(EXEEXT)'; \ + b='test-random'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-random-mt.log: test-random-mt$(EXEEXT) + @p='test-random-mt$(EXEEXT)'; \ + b='test-random-mt'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-random_r.log: test-random_r$(EXEEXT) + @p='test-random_r$(EXEEXT)'; \ + b='test-random_r'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-realloc-gnu.log: test-realloc-gnu$(EXEEXT) @p='test-realloc-gnu$(EXEEXT)'; \ b='test-realloc-gnu'; \ @@ -13176,6 +14429,13 @@ test-setlocale_null-mt-all.log: test-setlocale_null-mt-all$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-setlocale_null-unlocked.log: test-setlocale_null-unlocked$(EXEEXT) + @p='test-setlocale_null-unlocked$(EXEEXT)'; \ + b='test-setlocale_null-unlocked'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-setlocale1.sh.log: test-setlocale1.sh @p='test-setlocale1.sh'; \ b='test-setlocale1.sh'; \ @@ -13246,13 +14506,6 @@ test-stat-time.log: test-stat-time$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-stdalign.log: test-stdalign$(EXEEXT) - @p='test-stdalign$(EXEEXT)'; \ - b='test-stdalign'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdbool.log: test-stdbool$(EXEEXT) @p='test-stdbool$(EXEEXT)'; \ b='test-stdbool'; \ @@ -13421,6 +14674,13 @@ test-thread_create.log: test-thread_create$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-time-h.log: test-time-h$(EXEEXT) + @p='test-time-h$(EXEEXT)'; \ + b='test-time-h'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-time.log: test-time$(EXEEXT) @p='test-time$(EXEEXT)'; \ b='test-time'; \ @@ -13428,6 +14688,13 @@ test-time.log: test-time$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-uchar.log: test-uchar$(EXEEXT) + @p='test-uchar$(EXEEXT)'; \ + b='test-uchar'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-cased.log: test-cased$(EXEEXT) @p='test-cased$(EXEEXT)'; \ b='test-cased'; \ @@ -14324,6 +15591,27 @@ test-digit.log: test-digit$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-incb_byname.log: test-incb_byname$(EXEEXT) + @p='test-incb_byname$(EXEEXT)'; \ + b='test-incb_byname'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-incb_name.log: test-incb_name$(EXEEXT) + @p='test-incb_name$(EXEEXT)'; \ + b='test-incb_name'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-incb_of.log: test-incb_of$(EXEEXT) + @p='test-incb_of$(EXEEXT)'; \ + b='test-incb_of'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-joininggroup_byname.log: test-joininggroup_byname$(EXEEXT) @p='test-joininggroup_byname$(EXEEXT)'; \ b='test-joininggroup_byname'; \ @@ -14723,6 +16011,20 @@ test-pr_hyphen.log: test-pr_hyphen$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-pr_id_compat_math_continue.log: test-pr_id_compat_math_continue$(EXEEXT) + @p='test-pr_id_compat_math_continue$(EXEEXT)'; \ + b='test-pr_id_compat_math_continue'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-pr_id_compat_math_start.log: test-pr_id_compat_math_start$(EXEEXT) + @p='test-pr_id_compat_math_start$(EXEEXT)'; \ + b='test-pr_id_compat_math_start'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-pr_id_continue.log: test-pr_id_continue$(EXEEXT) @p='test-pr_id_continue$(EXEEXT)'; \ b='test-pr_id_continue'; \ @@ -14758,6 +16060,13 @@ test-pr_ids_trinary_operator.log: test-pr_ids_trinary_operator$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-pr_ids_unary_operator.log: test-pr_ids_unary_operator$(EXEEXT) + @p='test-pr_ids_unary_operator$(EXEEXT)'; \ + b='test-pr_ids_unary_operator'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-pr_ignorable_control.log: test-pr_ignorable_control$(EXEEXT) @p='test-pr_ignorable_control$(EXEEXT)'; \ b='test-pr_ignorable_control'; \ @@ -14919,6 +16228,13 @@ test-pr_pattern_white_space.log: test-pr_pattern_white_space$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-pr_prepended_concatenation_mark.log: test-pr_prepended_concatenation_mark$(EXEEXT) + @p='test-pr_prepended_concatenation_mark$(EXEEXT)'; \ + b='test-pr_prepended_concatenation_mark'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-pr_private_use.log: test-pr_private_use$(EXEEXT) @p='test-pr_private_use$(EXEEXT)'; \ b='test-pr_private_use'; \ @@ -15234,6 +16550,13 @@ test-ulc-width-linebreaks.log: test-ulc-width-linebreaks$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-u-version.log: test-u-version$(EXEEXT) + @p='test-u-version$(EXEEXT)'; \ + b='test-u-version'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) uniname/test-uninames.sh.log: uniname/test-uninames.sh @p='uniname/test-uninames.sh'; \ b='uniname/test-uninames.sh'; \ @@ -15675,6 +16998,13 @@ test-u16-next.log: test-u16-next$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-u16-pcpy.log: test-u16-pcpy$(EXEEXT) + @p='test-u16-pcpy$(EXEEXT)'; \ + b='test-u16-pcpy'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-u16-prev.log: test-u16-prev$(EXEEXT) @p='test-u16-prev$(EXEEXT)'; \ b='test-u16-prev'; \ @@ -15920,6 +17250,13 @@ test-u32-next.log: test-u32-next$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-u32-pcpy.log: test-u32-pcpy$(EXEEXT) + @p='test-u32-pcpy$(EXEEXT)'; \ + b='test-u32-pcpy'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-u32-prev.log: test-u32-prev$(EXEEXT) @p='test-u32-prev$(EXEEXT)'; \ b='test-u32-prev'; \ @@ -16165,6 +17502,13 @@ test-u8-next.log: test-u8-next$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-u8-pcpy.log: test-u8-pcpy$(EXEEXT) + @p='test-u8-pcpy$(EXEEXT)'; \ + b='test-u8-pcpy'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-u8-prev.log: test-u8-prev$(EXEEXT) @p='test-u8-prev$(EXEEXT)'; \ b='test-u8-prev'; \ @@ -16452,13 +17796,6 @@ test-wcrtomb.sh.log: test-wcrtomb.sh --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -test-wcrtomb-w32-1.sh.log: test-wcrtomb-w32-1.sh - @p='test-wcrtomb-w32-1.sh'; \ - b='test-wcrtomb-w32-1.sh'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-2.sh.log: test-wcrtomb-w32-2.sh @p='test-wcrtomb-w32-2.sh'; \ b='test-wcrtomb-w32-2.sh'; \ @@ -16501,6 +17838,13 @@ test-wcrtomb-w32-7.sh.log: test-wcrtomb-w32-7.sh --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-wcrtomb-w32-8.sh.log: test-wcrtomb-w32-8.sh + @p='test-wcrtomb-w32-8.sh'; \ + b='test-wcrtomb-w32-8.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) test-wctype-h.log: test-wctype-h$(EXEEXT) @p='test-wctype-h$(EXEEXT)'; \ b='test-wctype-h'; \ @@ -16647,6 +17991,8 @@ distclean-generic: -rm -f unigbrk/$(am__dirstamp) -rm -f unilbrk/$(DEPDIR)/$(am__dirstamp) -rm -f unilbrk/$(am__dirstamp) + -rm -f unimetadata/$(DEPDIR)/$(am__dirstamp) + -rm -f unimetadata/$(am__dirstamp) -rm -f uniname/$(DEPDIR)/$(am__dirstamp) -rm -f uniname/$(am__dirstamp) -rm -f uninorm/$(DEPDIR)/$(am__dirstamp) @@ -16678,7 +18024,10 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/basename-lgpl.Po -rm -f ./$(DEPDIR)/binary-io.Po -rm -f ./$(DEPDIR)/bind.Po + -rm -f ./$(DEPDIR)/btoc32.Po -rm -f ./$(DEPDIR)/btowc.Po + -rm -f ./$(DEPDIR)/c32rtomb.Po + -rm -f ./$(DEPDIR)/c32tob.Po -rm -f ./$(DEPDIR)/calloc.Po -rm -f ./$(DEPDIR)/cloexec.Po -rm -f ./$(DEPDIR)/close.Po @@ -16717,10 +18066,13 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/pthread_sigmask.Po -rm -f ./$(DEPDIR)/putenv.Po -rm -f ./$(DEPDIR)/raise.Po + -rm -f ./$(DEPDIR)/random.Po + -rm -f ./$(DEPDIR)/random_r.Po -rm -f ./$(DEPDIR)/randomd.Po -rm -f ./$(DEPDIR)/randoml.Po -rm -f ./$(DEPDIR)/realloc.Po -rm -f ./$(DEPDIR)/reallocarray.Po + -rm -f ./$(DEPDIR)/same-inode.Po -rm -f ./$(DEPDIR)/sched_yield.Po -rm -f ./$(DEPDIR)/select.Po -rm -f ./$(DEPDIR)/setenv.Po @@ -16741,16 +18093,34 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/symlink.Po -rm -f ./$(DEPDIR)/sys_socket.Po -rm -f ./$(DEPDIR)/test-accept.Po + -rm -f ./$(DEPDIR)/test-alignasof.Po -rm -f ./$(DEPDIR)/test-alloca-opt.Po -rm -f ./$(DEPDIR)/test-arpa_inet.Po -rm -f ./$(DEPDIR)/test-array-mergesort.Po -rm -f ./$(DEPDIR)/test-assert.Po -rm -f ./$(DEPDIR)/test-binary-io.Po -rm -f ./$(DEPDIR)/test-bind.Po + -rm -f ./$(DEPDIR)/test-btoc32.Po -rm -f ./$(DEPDIR)/test-btowc.Po -rm -f ./$(DEPDIR)/test-c-ctype.Po -rm -f ./$(DEPDIR)/test-c-strcasecmp.Po -rm -f ./$(DEPDIR)/test-c-strncasecmp.Po + -rm -f ./$(DEPDIR)/test-c32isalnum.Po + -rm -f ./$(DEPDIR)/test-c32isalpha.Po + -rm -f ./$(DEPDIR)/test-c32isblank.Po + -rm -f ./$(DEPDIR)/test-c32iscntrl.Po + -rm -f ./$(DEPDIR)/test-c32isdigit.Po + -rm -f ./$(DEPDIR)/test-c32isgraph.Po + -rm -f ./$(DEPDIR)/test-c32islower.Po + -rm -f ./$(DEPDIR)/test-c32isprint.Po + -rm -f ./$(DEPDIR)/test-c32ispunct.Po + -rm -f ./$(DEPDIR)/test-c32isspace.Po + -rm -f ./$(DEPDIR)/test-c32isupper.Po + -rm -f ./$(DEPDIR)/test-c32isxdigit.Po + -rm -f ./$(DEPDIR)/test-c32rtomb-w32.Po + -rm -f ./$(DEPDIR)/test-c32rtomb.Po + -rm -f ./$(DEPDIR)/test-c32tolower.Po + -rm -f ./$(DEPDIR)/test-c32width.Po -rm -f ./$(DEPDIR)/test-calloc-gnu.Po -rm -f ./$(DEPDIR)/test-cloexec.Po -rm -f ./$(DEPDIR)/test-close.Po @@ -16759,6 +18129,7 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/test-dup2.Po -rm -f ./$(DEPDIR)/test-environ.Po -rm -f ./$(DEPDIR)/test-errno.Po + -rm -f ./$(DEPDIR)/test-error.Po -rm -f ./$(DEPDIR)/test-fcntl-h.Po -rm -f ./$(DEPDIR)/test-fcntl.Po -rm -f ./$(DEPDIR)/test-fdopen.Po @@ -16791,8 +18162,10 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/test-isnanl-nolibm.Po -rm -f ./$(DEPDIR)/test-iswblank.Po -rm -f ./$(DEPDIR)/test-iswdigit.Po + -rm -f ./$(DEPDIR)/test-iswpunct.Po -rm -f ./$(DEPDIR)/test-iswxdigit.Po -rm -f ./$(DEPDIR)/test-langinfo.Po + -rm -f ./$(DEPDIR)/test-largefile.Po -rm -f ./$(DEPDIR)/test-limits-h.Po -rm -f ./$(DEPDIR)/test-listen.Po -rm -f ./$(DEPDIR)/test-localcharset.Po @@ -16803,6 +18176,8 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/test-malloc-gnu.Po -rm -f ./$(DEPDIR)/test-malloca.Po -rm -f ./$(DEPDIR)/test-math.Po + -rm -f ./$(DEPDIR)/test-mbrtoc32-w32.Po + -rm -f ./$(DEPDIR)/test-mbrtoc32.Po -rm -f ./$(DEPDIR)/test-mbrtowc-w32.Po -rm -f ./$(DEPDIR)/test-mbrtowc.Po -rm -f ./$(DEPDIR)/test-mbsinit.Po @@ -16823,6 +18198,9 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/test-pthread_sigmask1.Po -rm -f ./$(DEPDIR)/test-pthread_sigmask2.Po -rm -f ./$(DEPDIR)/test-raise.Po + -rm -f ./$(DEPDIR)/test-random-mt.Po + -rm -f ./$(DEPDIR)/test-random.Po + -rm -f ./$(DEPDIR)/test-random_r.Po -rm -f ./$(DEPDIR)/test-realloc-gnu.Po -rm -f ./$(DEPDIR)/test-reallocarray.Po -rm -f ./$(DEPDIR)/test-rwlock1.Po @@ -16835,6 +18213,7 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/test-setlocale2.Po -rm -f ./$(DEPDIR)/test-setlocale_null-mt-all.Po -rm -f ./$(DEPDIR)/test-setlocale_null-mt-one.Po + -rm -f ./$(DEPDIR)/test-setlocale_null-unlocked.Po -rm -f ./$(DEPDIR)/test-setlocale_null.Po -rm -f ./$(DEPDIR)/test-setsockopt.Po -rm -f ./$(DEPDIR)/test-signal-h.Po @@ -16844,7 +18223,6 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/test-sockets.Po -rm -f ./$(DEPDIR)/test-stat-time.Po -rm -f ./$(DEPDIR)/test-stat.Po - -rm -f ./$(DEPDIR)/test-stdalign.Po -rm -f ./$(DEPDIR)/test-stdbool.Po -rm -f ./$(DEPDIR)/test-stdckdint.Po -rm -f ./$(DEPDIR)/test-stddef.Po @@ -16868,7 +18246,9 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/test-sys_uio.Po -rm -f ./$(DEPDIR)/test-thread_create.Po -rm -f ./$(DEPDIR)/test-thread_self.Po + -rm -f ./$(DEPDIR)/test-time-h.Po -rm -f ./$(DEPDIR)/test-time.Po + -rm -f ./$(DEPDIR)/test-uchar.Po -rm -f ./$(DEPDIR)/test-unistd.Po -rm -f ./$(DEPDIR)/test-unsetenv.Po -rm -f ./$(DEPDIR)/test-usleep.Po @@ -16880,6 +18260,7 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/test-wctype-h.Po -rm -f ./$(DEPDIR)/test-wcwidth.Po -rm -f ./$(DEPDIR)/test-xalloc-die.Po + -rm -f ./$(DEPDIR)/time.Po -rm -f ./$(DEPDIR)/unsetenv.Po -rm -f ./$(DEPDIR)/usleep.Po -rm -f ./$(DEPDIR)/wcrtomb.Po @@ -17016,6 +18397,9 @@ distclean: distclean-recursive -rm -f unictype/$(DEPDIR)/test-ctype_xdigit.Po -rm -f unictype/$(DEPDIR)/test-decdigit.Po -rm -f unictype/$(DEPDIR)/test-digit.Po + -rm -f unictype/$(DEPDIR)/test-incb_byname.Po + -rm -f unictype/$(DEPDIR)/test-incb_name.Po + -rm -f unictype/$(DEPDIR)/test-incb_of.Po -rm -f unictype/$(DEPDIR)/test-joininggroup_byname.Po -rm -f unictype/$(DEPDIR)/test-joininggroup_name.Po -rm -f unictype/$(DEPDIR)/test-joininggroup_of.Po @@ -17073,11 +18457,14 @@ distclean: distclean-recursive -rm -f unictype/$(DEPDIR)/test-pr_grapheme_link.Po -rm -f unictype/$(DEPDIR)/test-pr_hex_digit.Po -rm -f unictype/$(DEPDIR)/test-pr_hyphen.Po + -rm -f unictype/$(DEPDIR)/test-pr_id_compat_math_continue.Po + -rm -f unictype/$(DEPDIR)/test-pr_id_compat_math_start.Po -rm -f unictype/$(DEPDIR)/test-pr_id_continue.Po -rm -f unictype/$(DEPDIR)/test-pr_id_start.Po -rm -f unictype/$(DEPDIR)/test-pr_ideographic.Po -rm -f unictype/$(DEPDIR)/test-pr_ids_binary_operator.Po -rm -f unictype/$(DEPDIR)/test-pr_ids_trinary_operator.Po + -rm -f unictype/$(DEPDIR)/test-pr_ids_unary_operator.Po -rm -f unictype/$(DEPDIR)/test-pr_ignorable_control.Po -rm -f unictype/$(DEPDIR)/test-pr_iso_control.Po -rm -f unictype/$(DEPDIR)/test-pr_join_control.Po @@ -17101,6 +18488,7 @@ distclean: distclean-recursive -rm -f unictype/$(DEPDIR)/test-pr_paragraph_separator.Po -rm -f unictype/$(DEPDIR)/test-pr_pattern_syntax.Po -rm -f unictype/$(DEPDIR)/test-pr_pattern_white_space.Po + -rm -f unictype/$(DEPDIR)/test-pr_prepended_concatenation_mark.Po -rm -f unictype/$(DEPDIR)/test-pr_private_use.Po -rm -f unictype/$(DEPDIR)/test-pr_punctuation.Po -rm -f unictype/$(DEPDIR)/test-pr_quotation_mark.Po @@ -17146,6 +18534,7 @@ distclean: distclean-recursive -rm -f unilbrk/$(DEPDIR)/test-u8-width-linebreaks.Po -rm -f unilbrk/$(DEPDIR)/test-ulc-possible-linebreaks.Po -rm -f unilbrk/$(DEPDIR)/test-ulc-width-linebreaks.Po + -rm -f unimetadata/$(DEPDIR)/test-u-version.Po -rm -f uniname/$(DEPDIR)/test-uninames.Po -rm -f uninorm/$(DEPDIR)/test-canonical-decomposition.Po -rm -f uninorm/$(DEPDIR)/test-compat-decomposition.Po @@ -17221,6 +18610,7 @@ distclean: distclean-recursive -rm -f unistr/$(DEPDIR)/test-u16-mbtoucr.Po -rm -f unistr/$(DEPDIR)/test-u16-move.Po -rm -f unistr/$(DEPDIR)/test-u16-next.Po + -rm -f unistr/$(DEPDIR)/test-u16-pcpy.Po -rm -f unistr/$(DEPDIR)/test-u16-prev.Po -rm -f unistr/$(DEPDIR)/test-u16-set.Po -rm -f unistr/$(DEPDIR)/test-u16-stpcpy.Po @@ -17256,6 +18646,7 @@ distclean: distclean-recursive -rm -f unistr/$(DEPDIR)/test-u32-mbtoucr.Po -rm -f unistr/$(DEPDIR)/test-u32-move.Po -rm -f unistr/$(DEPDIR)/test-u32-next.Po + -rm -f unistr/$(DEPDIR)/test-u32-pcpy.Po -rm -f unistr/$(DEPDIR)/test-u32-prev.Po -rm -f unistr/$(DEPDIR)/test-u32-set.Po -rm -f unistr/$(DEPDIR)/test-u32-stpcpy.Po @@ -17291,6 +18682,7 @@ distclean: distclean-recursive -rm -f unistr/$(DEPDIR)/test-u8-mbtoucr.Po -rm -f unistr/$(DEPDIR)/test-u8-move.Po -rm -f unistr/$(DEPDIR)/test-u8-next.Po + -rm -f unistr/$(DEPDIR)/test-u8-pcpy.Po -rm -f unistr/$(DEPDIR)/test-u8-prev.Po -rm -f unistr/$(DEPDIR)/test-u8-set.Po -rm -f unistr/$(DEPDIR)/test-u8-stpcpy.Po @@ -17376,7 +18768,10 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/basename-lgpl.Po -rm -f ./$(DEPDIR)/binary-io.Po -rm -f ./$(DEPDIR)/bind.Po + -rm -f ./$(DEPDIR)/btoc32.Po -rm -f ./$(DEPDIR)/btowc.Po + -rm -f ./$(DEPDIR)/c32rtomb.Po + -rm -f ./$(DEPDIR)/c32tob.Po -rm -f ./$(DEPDIR)/calloc.Po -rm -f ./$(DEPDIR)/cloexec.Po -rm -f ./$(DEPDIR)/close.Po @@ -17415,10 +18810,13 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/pthread_sigmask.Po -rm -f ./$(DEPDIR)/putenv.Po -rm -f ./$(DEPDIR)/raise.Po + -rm -f ./$(DEPDIR)/random.Po + -rm -f ./$(DEPDIR)/random_r.Po -rm -f ./$(DEPDIR)/randomd.Po -rm -f ./$(DEPDIR)/randoml.Po -rm -f ./$(DEPDIR)/realloc.Po -rm -f ./$(DEPDIR)/reallocarray.Po + -rm -f ./$(DEPDIR)/same-inode.Po -rm -f ./$(DEPDIR)/sched_yield.Po -rm -f ./$(DEPDIR)/select.Po -rm -f ./$(DEPDIR)/setenv.Po @@ -17439,16 +18837,34 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/symlink.Po -rm -f ./$(DEPDIR)/sys_socket.Po -rm -f ./$(DEPDIR)/test-accept.Po + -rm -f ./$(DEPDIR)/test-alignasof.Po -rm -f ./$(DEPDIR)/test-alloca-opt.Po -rm -f ./$(DEPDIR)/test-arpa_inet.Po -rm -f ./$(DEPDIR)/test-array-mergesort.Po -rm -f ./$(DEPDIR)/test-assert.Po -rm -f ./$(DEPDIR)/test-binary-io.Po -rm -f ./$(DEPDIR)/test-bind.Po + -rm -f ./$(DEPDIR)/test-btoc32.Po -rm -f ./$(DEPDIR)/test-btowc.Po -rm -f ./$(DEPDIR)/test-c-ctype.Po -rm -f ./$(DEPDIR)/test-c-strcasecmp.Po -rm -f ./$(DEPDIR)/test-c-strncasecmp.Po + -rm -f ./$(DEPDIR)/test-c32isalnum.Po + -rm -f ./$(DEPDIR)/test-c32isalpha.Po + -rm -f ./$(DEPDIR)/test-c32isblank.Po + -rm -f ./$(DEPDIR)/test-c32iscntrl.Po + -rm -f ./$(DEPDIR)/test-c32isdigit.Po + -rm -f ./$(DEPDIR)/test-c32isgraph.Po + -rm -f ./$(DEPDIR)/test-c32islower.Po + -rm -f ./$(DEPDIR)/test-c32isprint.Po + -rm -f ./$(DEPDIR)/test-c32ispunct.Po + -rm -f ./$(DEPDIR)/test-c32isspace.Po + -rm -f ./$(DEPDIR)/test-c32isupper.Po + -rm -f ./$(DEPDIR)/test-c32isxdigit.Po + -rm -f ./$(DEPDIR)/test-c32rtomb-w32.Po + -rm -f ./$(DEPDIR)/test-c32rtomb.Po + -rm -f ./$(DEPDIR)/test-c32tolower.Po + -rm -f ./$(DEPDIR)/test-c32width.Po -rm -f ./$(DEPDIR)/test-calloc-gnu.Po -rm -f ./$(DEPDIR)/test-cloexec.Po -rm -f ./$(DEPDIR)/test-close.Po @@ -17457,6 +18873,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/test-dup2.Po -rm -f ./$(DEPDIR)/test-environ.Po -rm -f ./$(DEPDIR)/test-errno.Po + -rm -f ./$(DEPDIR)/test-error.Po -rm -f ./$(DEPDIR)/test-fcntl-h.Po -rm -f ./$(DEPDIR)/test-fcntl.Po -rm -f ./$(DEPDIR)/test-fdopen.Po @@ -17489,8 +18906,10 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/test-isnanl-nolibm.Po -rm -f ./$(DEPDIR)/test-iswblank.Po -rm -f ./$(DEPDIR)/test-iswdigit.Po + -rm -f ./$(DEPDIR)/test-iswpunct.Po -rm -f ./$(DEPDIR)/test-iswxdigit.Po -rm -f ./$(DEPDIR)/test-langinfo.Po + -rm -f ./$(DEPDIR)/test-largefile.Po -rm -f ./$(DEPDIR)/test-limits-h.Po -rm -f ./$(DEPDIR)/test-listen.Po -rm -f ./$(DEPDIR)/test-localcharset.Po @@ -17501,6 +18920,8 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/test-malloc-gnu.Po -rm -f ./$(DEPDIR)/test-malloca.Po -rm -f ./$(DEPDIR)/test-math.Po + -rm -f ./$(DEPDIR)/test-mbrtoc32-w32.Po + -rm -f ./$(DEPDIR)/test-mbrtoc32.Po -rm -f ./$(DEPDIR)/test-mbrtowc-w32.Po -rm -f ./$(DEPDIR)/test-mbrtowc.Po -rm -f ./$(DEPDIR)/test-mbsinit.Po @@ -17521,6 +18942,9 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/test-pthread_sigmask1.Po -rm -f ./$(DEPDIR)/test-pthread_sigmask2.Po -rm -f ./$(DEPDIR)/test-raise.Po + -rm -f ./$(DEPDIR)/test-random-mt.Po + -rm -f ./$(DEPDIR)/test-random.Po + -rm -f ./$(DEPDIR)/test-random_r.Po -rm -f ./$(DEPDIR)/test-realloc-gnu.Po -rm -f ./$(DEPDIR)/test-reallocarray.Po -rm -f ./$(DEPDIR)/test-rwlock1.Po @@ -17533,6 +18957,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/test-setlocale2.Po -rm -f ./$(DEPDIR)/test-setlocale_null-mt-all.Po -rm -f ./$(DEPDIR)/test-setlocale_null-mt-one.Po + -rm -f ./$(DEPDIR)/test-setlocale_null-unlocked.Po -rm -f ./$(DEPDIR)/test-setlocale_null.Po -rm -f ./$(DEPDIR)/test-setsockopt.Po -rm -f ./$(DEPDIR)/test-signal-h.Po @@ -17542,7 +18967,6 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/test-sockets.Po -rm -f ./$(DEPDIR)/test-stat-time.Po -rm -f ./$(DEPDIR)/test-stat.Po - -rm -f ./$(DEPDIR)/test-stdalign.Po -rm -f ./$(DEPDIR)/test-stdbool.Po -rm -f ./$(DEPDIR)/test-stdckdint.Po -rm -f ./$(DEPDIR)/test-stddef.Po @@ -17566,7 +18990,9 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/test-sys_uio.Po -rm -f ./$(DEPDIR)/test-thread_create.Po -rm -f ./$(DEPDIR)/test-thread_self.Po + -rm -f ./$(DEPDIR)/test-time-h.Po -rm -f ./$(DEPDIR)/test-time.Po + -rm -f ./$(DEPDIR)/test-uchar.Po -rm -f ./$(DEPDIR)/test-unistd.Po -rm -f ./$(DEPDIR)/test-unsetenv.Po -rm -f ./$(DEPDIR)/test-usleep.Po @@ -17578,6 +19004,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/test-wctype-h.Po -rm -f ./$(DEPDIR)/test-wcwidth.Po -rm -f ./$(DEPDIR)/test-xalloc-die.Po + -rm -f ./$(DEPDIR)/time.Po -rm -f ./$(DEPDIR)/unsetenv.Po -rm -f ./$(DEPDIR)/usleep.Po -rm -f ./$(DEPDIR)/wcrtomb.Po @@ -17714,6 +19141,9 @@ maintainer-clean: maintainer-clean-recursive -rm -f unictype/$(DEPDIR)/test-ctype_xdigit.Po -rm -f unictype/$(DEPDIR)/test-decdigit.Po -rm -f unictype/$(DEPDIR)/test-digit.Po + -rm -f unictype/$(DEPDIR)/test-incb_byname.Po + -rm -f unictype/$(DEPDIR)/test-incb_name.Po + -rm -f unictype/$(DEPDIR)/test-incb_of.Po -rm -f unictype/$(DEPDIR)/test-joininggroup_byname.Po -rm -f unictype/$(DEPDIR)/test-joininggroup_name.Po -rm -f unictype/$(DEPDIR)/test-joininggroup_of.Po @@ -17771,11 +19201,14 @@ maintainer-clean: maintainer-clean-recursive -rm -f unictype/$(DEPDIR)/test-pr_grapheme_link.Po -rm -f unictype/$(DEPDIR)/test-pr_hex_digit.Po -rm -f unictype/$(DEPDIR)/test-pr_hyphen.Po + -rm -f unictype/$(DEPDIR)/test-pr_id_compat_math_continue.Po + -rm -f unictype/$(DEPDIR)/test-pr_id_compat_math_start.Po -rm -f unictype/$(DEPDIR)/test-pr_id_continue.Po -rm -f unictype/$(DEPDIR)/test-pr_id_start.Po -rm -f unictype/$(DEPDIR)/test-pr_ideographic.Po -rm -f unictype/$(DEPDIR)/test-pr_ids_binary_operator.Po -rm -f unictype/$(DEPDIR)/test-pr_ids_trinary_operator.Po + -rm -f unictype/$(DEPDIR)/test-pr_ids_unary_operator.Po -rm -f unictype/$(DEPDIR)/test-pr_ignorable_control.Po -rm -f unictype/$(DEPDIR)/test-pr_iso_control.Po -rm -f unictype/$(DEPDIR)/test-pr_join_control.Po @@ -17799,6 +19232,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f unictype/$(DEPDIR)/test-pr_paragraph_separator.Po -rm -f unictype/$(DEPDIR)/test-pr_pattern_syntax.Po -rm -f unictype/$(DEPDIR)/test-pr_pattern_white_space.Po + -rm -f unictype/$(DEPDIR)/test-pr_prepended_concatenation_mark.Po -rm -f unictype/$(DEPDIR)/test-pr_private_use.Po -rm -f unictype/$(DEPDIR)/test-pr_punctuation.Po -rm -f unictype/$(DEPDIR)/test-pr_quotation_mark.Po @@ -17844,6 +19278,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f unilbrk/$(DEPDIR)/test-u8-width-linebreaks.Po -rm -f unilbrk/$(DEPDIR)/test-ulc-possible-linebreaks.Po -rm -f unilbrk/$(DEPDIR)/test-ulc-width-linebreaks.Po + -rm -f unimetadata/$(DEPDIR)/test-u-version.Po -rm -f uniname/$(DEPDIR)/test-uninames.Po -rm -f uninorm/$(DEPDIR)/test-canonical-decomposition.Po -rm -f uninorm/$(DEPDIR)/test-compat-decomposition.Po @@ -17919,6 +19354,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f unistr/$(DEPDIR)/test-u16-mbtoucr.Po -rm -f unistr/$(DEPDIR)/test-u16-move.Po -rm -f unistr/$(DEPDIR)/test-u16-next.Po + -rm -f unistr/$(DEPDIR)/test-u16-pcpy.Po -rm -f unistr/$(DEPDIR)/test-u16-prev.Po -rm -f unistr/$(DEPDIR)/test-u16-set.Po -rm -f unistr/$(DEPDIR)/test-u16-stpcpy.Po @@ -17954,6 +19390,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f unistr/$(DEPDIR)/test-u32-mbtoucr.Po -rm -f unistr/$(DEPDIR)/test-u32-move.Po -rm -f unistr/$(DEPDIR)/test-u32-next.Po + -rm -f unistr/$(DEPDIR)/test-u32-pcpy.Po -rm -f unistr/$(DEPDIR)/test-u32-prev.Po -rm -f unistr/$(DEPDIR)/test-u32-set.Po -rm -f unistr/$(DEPDIR)/test-u32-stpcpy.Po @@ -17989,6 +19426,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f unistr/$(DEPDIR)/test-u8-mbtoucr.Po -rm -f unistr/$(DEPDIR)/test-u8-move.Po -rm -f unistr/$(DEPDIR)/test-u8-next.Po + -rm -f unistr/$(DEPDIR)/test-u8-pcpy.Po -rm -f unistr/$(DEPDIR)/test-u8-prev.Po -rm -f unistr/$(DEPDIR)/test-u8-set.Po -rm -f unistr/$(DEPDIR)/test-u8-stpcpy.Po @@ -18106,6 +19544,21 @@ ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(srcdir)/ctype.in.h > $@-t $(AM_V_at)mv $@-t $@ +# We need the following in order to override <error.h>. +error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H) + $(gl_V_at)$(SED_HEADER_STDOUT) \ + -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \ + -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \ + -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \ + -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \ + -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + $(srcdir)/error.in.h > $@-t + $(AM_V_at)mv $@-t $@ + # We need the following in order to create <fcntl.h> when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) @@ -18184,6 +19637,8 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H -e 's|@''HAVE_PTHREAD_DETACH''@|$(HAVE_PTHREAD_DETACH)|g' \ -e 's|@''HAVE_PTHREAD_JOIN''@|$(HAVE_PTHREAD_JOIN)|g' \ -e 's|@''HAVE_PTHREAD_EXIT''@|$(HAVE_PTHREAD_EXIT)|g' \ + < $(srcdir)/pthread.in.h > $@-t1 + $(AM_V_at)sed \ -e 's|@''HAVE_PTHREAD_ONCE''@|$(HAVE_PTHREAD_ONCE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_INIT''@|$(HAVE_PTHREAD_MUTEX_INIT)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_INIT''@|$(HAVE_PTHREAD_MUTEXATTR_INIT)|g' \ @@ -18225,8 +19680,9 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H -e 's|@''HAVE_PTHREAD_SPIN_TRYLOCK''@|$(HAVE_PTHREAD_SPIN_TRYLOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_UNLOCK''@|$(HAVE_PTHREAD_SPIN_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_DESTROY''@|$(HAVE_PTHREAD_SPIN_DESTROY)|g' \ - < $(srcdir)/pthread.in.h | \ - sed -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \ + < $@-t1 > $@-t2 + $(AM_V_at)sed \ + -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_INIT''@|$(REPLACE_PTHREAD_ATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_GETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_GETDETACHSTATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_SETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_SETDETACHSTATE)|g' \ @@ -18260,6 +19716,8 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H -e 's|@''REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_UNLOCK''@|$(REPLACE_PTHREAD_RWLOCK_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_DESTROY''@|$(REPLACE_PTHREAD_RWLOCK_DESTROY)|g' \ + < $@-t2 > $@-t3 + $(AM_V_at)sed \ -e 's|@''REPLACE_PTHREAD_COND_INIT''@|$(REPLACE_PTHREAD_COND_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_CONDATTR_INIT''@|$(REPLACE_PTHREAD_CONDATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_CONDATTR_DESTROY''@|$(REPLACE_PTHREAD_CONDATTR_DESTROY)|g' \ @@ -18281,8 +19739,9 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - > $@-t - $(AM_V_at)mv $@-t $@ + < $@-t3 > $@-t4 + $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 + $(AM_V_at)mv $@-t4 $@ # We need the following in order to create a replacement for <sched.h> when # the system doesn't have one. @@ -18335,14 +19794,6 @@ signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H $(srcdir)/signal.in.h > $@-t $(AM_V_at)mv $@-t $@ -# We need the following in order to create <stdalign.h> when the system -# doesn't have one that works. -@GL_GENERATE_STDALIGN_H_TRUE@stdalign.h: stdalign.in.h $(top_builddir)/config.status -@GL_GENERATE_STDALIGN_H_TRUE@ $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h -@GL_GENERATE_STDALIGN_H_TRUE@ $(AM_V_at)mv $@-t $@ -@GL_GENERATE_STDALIGN_H_FALSE@stdalign.h: $(top_builddir)/config.status -@GL_GENERATE_STDALIGN_H_FALSE@ rm -f $@ - # We need the following in order to create <stdio.h> when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) @@ -18412,14 +19863,17 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ - < $(srcdir)/stdio.in.h | \ - sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ + < $(srcdir)/stdio.in.h > $@-t1 + $(AM_V_at)sed \ + -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ @@ -18430,6 +19884,8 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + < $@-t1 > $@-t2 + $(AM_V_at)sed \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ @@ -18467,8 +19923,9 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - > $@-t - $(AM_V_at)mv $@-t $@ + < $@-t2 > $@-t3 + $(AM_V_at)rm -f $@-t1 $@-t2 + $(AM_V_at)mv $@-t3 $@ # We need the following in order to create <sys/ioctl.h> when the system # does not have a complete one. @@ -18666,6 +20123,7 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $( -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ + -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ @@ -18687,7 +20145,10 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $( -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ + -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ + -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \ + -e 's|@''REPLACE_TIMESPEC_GETRES''@|$(REPLACE_TIMESPEC_GETRES)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ diff --git a/tests/_Noreturn.h b/tests/_Noreturn.h index e914627a..7326bd47 100644 --- a/tests/_Noreturn.h +++ b/tests/_Noreturn.h @@ -1,5 +1,5 @@ /* A C macro for declaring that a function does not return. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -26,6 +26,11 @@ AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] +# elif (defined __clang__ && __clang_major__ < 16 \ + && defined _GL_WORK_AROUND_LLVM_BUG_59792) + /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around + that rare LLVM bug, though you may get many false-alarm warnings. */ +# define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ diff --git a/tests/accept.c b/tests/accept.c index 5c4d1f35..18ce80c6 100644 --- a/tests/accept.c +++ b/tests/accept.c @@ -1,6 +1,6 @@ /* accept.c --- wrappers for Windows accept function - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/arg-nonnull.h b/tests/arg-nonnull.h index e4513efe..46c711ca 100644 --- a/tests/arg-nonnull.h +++ b/tests/arg-nonnull.h @@ -1,5 +1,5 @@ /* A C macro for declaring that specific arguments must not be NULL. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published diff --git a/tests/arpa_inet.in.h b/tests/arpa_inet.in.h index f5d7db2d..523a448c 100644 --- a/tests/arpa_inet.in.h +++ b/tests/arpa_inet.in.h @@ -1,6 +1,6 @@ /* A GNU-like <arpa/inet.h>. - Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -49,6 +49,11 @@ #ifndef _@GUARD_PREFIX@_ARPA_INET_H #define _@GUARD_PREFIX@_ARPA_INET_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* Get all possible declarations of inet_ntop() and inet_pton(). */ #if (@GNULIB_INET_NTOP@ || @GNULIB_INET_PTON@ || defined GNULIB_POSIXCHECK) \ && @HAVE_WS2TCPIP_H@ diff --git a/tests/atomic-int-gnulib.h b/tests/atomic-int-gnulib.h index d1c68a2b..b459f344 100644 --- a/tests/atomic-int-gnulib.h +++ b/tests/atomic-int-gnulib.h @@ -1,5 +1,5 @@ /* Atomic integers. Useful for testing multithreaded locking primitives. - Copyright (C) 2005, 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2005, 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -107,6 +107,7 @@ init_atomic_int (struct atomic_int *ai) else { perror ("sem_open failed"); + fflush (stderr); abort (); } } diff --git a/tests/basename-lgpl.c b/tests/basename-lgpl.c index f8da1484..256f8460 100644 --- a/tests/basename-lgpl.c +++ b/tests/basename-lgpl.c @@ -1,6 +1,6 @@ /* basename.c -- return the last element in a file name - Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2022 Free Software + Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify diff --git a/tests/basename-lgpl.h b/tests/basename-lgpl.h index 5569f219..2a56be98 100644 --- a/tests/basename-lgpl.h +++ b/tests/basename-lgpl.h @@ -1,6 +1,6 @@ /* Extract the last component (base name) of a file name. - Copyright (C) 1998, 2001, 2003-2006, 2009-2022 Free Software Foundation, + Copyright (C) 1998, 2001, 2003-2006, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify @@ -19,6 +19,11 @@ #ifndef _BASENAME_LGPL_H #define _BASENAME_LGPL_H +/* This file uses _GL_ATTRIBUTE_PURE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #include <stddef.h> #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT diff --git a/tests/binary-io.c b/tests/binary-io.c index ea407fd7..40f01d67 100644 --- a/tests/binary-io.c +++ b/tests/binary-io.c @@ -1,5 +1,5 @@ /* Binary mode I/O. - Copyright 2017-2022 Free Software Foundation, Inc. + Copyright 2017-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/binary-io.h b/tests/binary-io.h index 5b7661e2..0cc5c117 100644 --- a/tests/binary-io.h +++ b/tests/binary-io.h @@ -1,5 +1,5 @@ /* Binary mode I/O. - Copyright (C) 2001, 2003, 2005, 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2001, 2003, 2005, 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -17,6 +17,11 @@ #ifndef _BINARY_H #define _BINARY_H +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* For systems that distinguish between text and binary I/O. O_BINARY is guaranteed by the gnulib <fcntl.h>. */ #include <fcntl.h> @@ -25,9 +30,6 @@ so we include it here first. */ #include <stdio.h> -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif _GL_INLINE_HEADER_BEGIN #ifndef BINARY_IO_INLINE # define BINARY_IO_INLINE _GL_INLINE diff --git a/tests/bind.c b/tests/bind.c index 199e0ba9..7c557448 100644 --- a/tests/bind.c +++ b/tests/bind.c @@ -1,6 +1,6 @@ /* bind.c --- wrappers for Windows bind function - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/btoc32.c b/tests/btoc32.c new file mode 100644 index 00000000..4f223059 --- /dev/null +++ b/tests/btoc32.c @@ -0,0 +1,68 @@ +/* Convert unibyte character to 32-bit wide character. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2020. */ + +#include <config.h> + +#define IN_BTOC32 +/* Specification. */ +#include <uchar.h> + +#include <stdio.h> +#include <string.h> +#include <wchar.h> + +#if GL_CHAR32_T_IS_UNICODE +# include "lc-charset-unicode.h" +#endif + +#if _GL_WCHAR_T_IS_UCS4 +_GL_EXTERN_INLINE +#endif +wint_t +btoc32 (int c) +{ +#if HAVE_WORKING_MBRTOC32 && !_GL_WCHAR_T_IS_UCS4 + /* The char32_t encoding of a multibyte character may be different than its + wchar_t encoding. */ + if (c != EOF) + { + mbstate_t state; + char s[1]; + char32_t wc; + + mbszero (&state); + s[0] = (unsigned char) c; + if (mbrtoc32 (&wc, s, 1, &state) <= 1) + return wc; + } + return WEOF; +#else + /* In all known locale encodings, unibyte characters correspond only to + characters in the BMP. */ + wint_t wc = btowc (c); +# if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION + if (wc != WEOF && wc != 0) + { + wc = locale_encoding_to_unicode (wc); + if (wc == 0) + return WEOF; + } +# endif + return wc; +#endif +} diff --git a/tests/btowc.c b/tests/btowc.c index 4af58bb0..8bf21aa6 100644 --- a/tests/btowc.c +++ b/tests/btowc.c @@ -1,5 +1,5 @@ /* Convert unibyte character to wide character. - Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2008, 2010-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify @@ -22,6 +22,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> wint_t btowc (int c) @@ -32,7 +33,14 @@ btowc (int c) wchar_t wc; buf[0] = c; +#if HAVE_MBRTOWC + mbstate_t state; + mbszero (&state); + size_t ret = mbrtowc (&wc, buf, 1, &state); + if (!(ret == (size_t)(-1) || ret == (size_t)(-2))) +#else if (mbtowc (&wc, buf, 1) >= 0) +#endif return wc; } return WEOF; diff --git a/tests/c++defs.h b/tests/c++defs.h index ad181558..eb66967b 100644 --- a/tests/c++defs.h +++ b/tests/c++defs.h @@ -1,5 +1,5 @@ /* C++ compatible function declaration macros. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -99,6 +99,12 @@ Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); + + Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front + of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's + because + [[...]] extern "C" <declaration>; + is invalid syntax in C++.) */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) diff --git a/tests/c32rtomb.c b/tests/c32rtomb.c new file mode 100644 index 00000000..260bf097 --- /dev/null +++ b/tests/c32rtomb.c @@ -0,0 +1,132 @@ +/* Convert 32-bit wide character to multibyte character. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2020. */ + +#include <config.h> + +/* Specification. */ +#include <uchar.h> + +#include <errno.h> +#include <wchar.h> + +#include "attribute.h" /* FALLTHROUGH */ +#include "localcharset.h" +#include "streq.h" + +#if GL_CHAR32_T_IS_UNICODE +# include "lc-charset-unicode.h" +#endif + +size_t +c32rtomb (char *s, char32_t wc, mbstate_t *ps) +#undef c32rtomb +{ +#if HAVE_WORKING_MBRTOC32 + +# if C32RTOMB_RETVAL_BUG + if (s == NULL) + /* We know the NUL wide character corresponds to the NUL character. */ + return 1; +# endif + + return c32rtomb (s, wc, ps); + +#elif _GL_SMALL_WCHAR_T + + if (s == NULL) + return wcrtomb (NULL, 0, ps); + else + { + /* Special-case all encodings that may produce wide character values + > WCHAR_MAX. */ + const char *encoding = locale_charset (); + if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + { + /* Special-case the UTF-8 encoding. Assume that the wide-character + encoding in a UTF-8 locale is UCS-2 or, equivalently, UTF-16. */ + if (wc < 0x80) + { + s[0] = (unsigned char) wc; + return 1; + } + else + { + int count; + + if (wc < 0x800) + count = 2; + else if (wc < 0x10000) + { + if (wc < 0xd800 || wc >= 0xe000) + count = 3; + else + { + errno = EILSEQ; + return (size_t)(-1); + } + } + else if (wc < 0x110000) + count = 4; + else + { + errno = EILSEQ; + return (size_t)(-1); + } + + switch (count) /* note: code falls through cases! */ + { + case 4: s[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000; + FALLTHROUGH; + case 3: s[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800; + FALLTHROUGH; + case 2: s[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0; + /*case 1:*/ s[0] = wc; + } + return count; + } + } + else + { + if ((wchar_t) wc == wc) + return wcrtomb (s, (wchar_t) wc, ps); + else + { + errno = EILSEQ; + return (size_t)(-1); + } + } + } + +#else + + /* char32_t and wchar_t are equivalent. */ +# if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION + if (wc != 0) + { + wc = unicode_to_locale_encoding (wc); + if (wc == 0) + { + errno = EILSEQ; + return (size_t)(-1); + } + } +# endif + return wcrtomb (s, (wchar_t) wc, ps); + +#endif +} diff --git a/tests/c32tob.c b/tests/c32tob.c new file mode 100644 index 00000000..901c9249 --- /dev/null +++ b/tests/c32tob.c @@ -0,0 +1,70 @@ +/* Convert 32-bit wide character to unibyte character. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2020. */ + +#include <config.h> + +#define IN_C32TOB +/* Specification. */ +#include <uchar.h> + +#include <stdio.h> +#include <string.h> +#include <wchar.h> + +#if GL_CHAR32_T_IS_UNICODE +# include "lc-charset-unicode.h" +#endif + +#if _GL_WCHAR_T_IS_UCS4 +_GL_EXTERN_INLINE +#endif +int +c32tob (wint_t wc) +{ +#if HAVE_WORKING_MBRTOC32 && !_GL_WCHAR_T_IS_UCS4 + /* The char32_t encoding of a multibyte character may be different than its + wchar_t encoding. */ + if (wc != WEOF) + { + mbstate_t state; + char buf[8]; + + mbszero (&state); + if (c32rtomb (buf, wc, &state) == 1) + return (unsigned char) buf[0]; + } + return EOF; +#elif _GL_SMALL_WCHAR_T + /* In all known encodings, unibyte characters correspond only to + characters in the BMP. */ + if (wc != WEOF && (wchar_t) wc == wc) + return wctob ((wchar_t) wc); + else + return EOF; +#else +# if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION + if (wc != 0) + { + wc = unicode_to_locale_encoding (wc); + if (wc == 0) + return EOF; + } +# endif + return wctob (wc); +#endif +} diff --git a/tests/calloc.c b/tests/calloc.c index 0a934b30..81dfd3ef 100644 --- a/tests/calloc.c +++ b/tests/calloc.c @@ -1,6 +1,6 @@ /* calloc() function that is glibc compatible. This wrapper function is required at least on Tru64 UNIX 5.1 and mingw. - Copyright (C) 2004-2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2004-2007, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/cdefs.h b/tests/cdefs.h new file mode 100644 index 00000000..d38382ad --- /dev/null +++ b/tests/cdefs.h @@ -0,0 +1,715 @@ +/* Copyright (C) 1992-2024 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _SYS_CDEFS_H +#define _SYS_CDEFS_H 1 + +/* We are almost always included from features.h. */ +#ifndef _FEATURES_H +# include <features.h> +#endif + +/* The GNU libc does not support any K&R compilers or the traditional mode + of ISO C compilers anymore. Check for some of the combinations not + supported anymore. */ +#if defined __GNUC__ && !defined __STDC__ +# error "You need a ISO C conforming compiler to use the glibc headers" +#endif + +/* Some user header file might have defined this before. */ +#undef __P +#undef __PMT + +/* Compilers that lack __has_attribute may object to + #if defined __has_attribute && __has_attribute (...) + even though they do not need to evaluate the right-hand side of the &&. + Similarly for __has_builtin, etc. */ +#if (defined __has_attribute \ + && (!defined __clang_minor__ \ + || (defined __apple_build_version__ \ + ? 7000000 <= __apple_build_version__ \ + : 5 <= __clang_major__))) +# define __glibc_has_attribute(attr) __has_attribute (attr) +#else +# define __glibc_has_attribute(attr) 0 +#endif +#ifdef __has_builtin +# define __glibc_has_builtin(name) __has_builtin (name) +#else +# define __glibc_has_builtin(name) 0 +#endif +#ifdef __has_extension +# define __glibc_has_extension(ext) __has_extension (ext) +#else +# define __glibc_has_extension(ext) 0 +#endif + +#if defined __GNUC__ || defined __clang__ + +/* All functions, except those with callbacks or those that + synchronize memory, are leaf functions. */ +# if __GNUC_PREREQ (4, 6) && !defined _LIBC +# define __LEAF , __leaf__ +# define __LEAF_ATTR __attribute__ ((__leaf__)) +# else +# define __LEAF +# define __LEAF_ATTR +# endif + +/* GCC can always grok prototypes. For C++ programs we add throw() + to help it optimize the function calls. But this only works with + gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions + as non-throwing using a function attribute since programs can use + the -fexceptions options for C code as well. */ +# if !defined __cplusplus \ + && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__)) +# define __THROW __attribute__ ((__nothrow__ __LEAF)) +# define __THROWNL __attribute__ ((__nothrow__)) +# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct +# define __NTHNL(fct) __attribute__ ((__nothrow__)) fct +# else +# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4) +# if __cplusplus >= 201103L +# define __THROW noexcept (true) +# else +# define __THROW throw () +# endif +# define __THROWNL __THROW +# define __NTH(fct) __LEAF_ATTR fct __THROW +# define __NTHNL(fct) fct __THROW +# else +# define __THROW +# define __THROWNL +# define __NTH(fct) fct +# define __NTHNL(fct) fct +# endif +# endif + +#else /* Not GCC or clang. */ + +# if (defined __cplusplus \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) +# define __inline inline +# else +# define __inline /* No inline functions. */ +# endif + +# define __THROW +# define __THROWNL +# define __NTH(fct) fct + +#endif /* GCC || clang. */ + +/* These two macros are not used in glibc anymore. They are kept here + only because some other projects expect the macros to be defined. */ +#define __P(args) args +#define __PMT(args) args + +/* For these things, GCC behaves the ANSI way normally, + and the non-ANSI way under -traditional. */ + +#define __CONCAT(x,y) x ## y +#define __STRING(x) #x + +/* This is not a typedef so `const __ptr_t' does the right thing. */ +#define __ptr_t void * + + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + + +/* Gnulib avoids these definitions, as they don't work on non-glibc platforms. + In particular, __bos and __bos0 are defined differently in the Android libc. + */ +#ifndef __GNULIB_CDEFS + +/* Fortify support. */ +# define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) +# define __bos0(ptr) __builtin_object_size (ptr, 0) + +/* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */ +# if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \ + || __GNUC_PREREQ (12, 0)) +# define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0) +# define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1) +# else +# define __glibc_objsize0(__o) __bos0 (__o) +# define __glibc_objsize(__o) __bos (__o) +# endif + +/* Compile time conditions to choose between the regular, _chk and _chk_warn + variants. These conditions should get evaluated to constant and optimized + away. */ + +# define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s)) +# define __glibc_unsigned_or_positive(__l) \ + ((__typeof (__l)) 0 < (__typeof (__l)) -1 \ + || (__builtin_constant_p (__l) && (__l) > 0)) + +/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ + condition can be folded to a constant and if it is true, or unknown (-1) */ +# define __glibc_safe_or_unknown_len(__l, __s, __osz) \ + ((__osz) == (__SIZE_TYPE__) -1 \ + || (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + (__s), (__osz))) \ + && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz)))) + +/* Conversely, we know at compile time that the length is unsafe if the + __L * __S <= __OBJSZ condition can be folded to a constant and if it is + false. */ +# define __glibc_unsafe_len(__l, __s, __osz) \ + (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + __s, __osz)) \ + && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) + +/* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be + declared. */ + +# define __glibc_fortify(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \ + : __ ## f ## _chk (__VA_ARGS__, __osz))) \ + +/* Fortify function f, where object size argument passed to f is the number of + elements and not total size. */ + +# define __glibc_fortify_n(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \ + : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \ + +#endif + + +#if __GNUC_PREREQ (4,3) +# define __warnattr(msg) __attribute__((__warning__ (msg))) +# define __errordecl(name, msg) \ + extern void name (void) __attribute__((__error__ (msg))) +#else +# define __warnattr(msg) +# define __errordecl(name, msg) extern void name (void) +#endif + +/* Support for flexible arrays. + Headers that should use flexible arrays only if they're "real" + (e.g. only if they won't affect sizeof()) should test + #if __glibc_c99_flexarr_available. */ +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif __GNUC_PREREQ (2,97) || defined __clang__ +/* GCC 2.97 and clang support C99 flexible array members as an extension, + even when in C89 mode or compiling C++ (any version). */ +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif defined __GNUC__ +/* Pre-2.97 GCC did not support C99 flexible arrays but did have + an equivalent extension with slightly different notation. */ +# define __flexarr [0] +# define __glibc_c99_flexarr_available 1 +#else +/* Some other non-C99 compiler. Approximate with [1]. */ +# define __flexarr [1] +# define __glibc_c99_flexarr_available 0 +#endif + + +/* __asm__ ("xyz") is used throughout the headers to rename functions + at the assembly language level. This is wrapped by the __REDIRECT + macro, in order to support compilers that can do this some other + way. When compilers don't support asm-names at all, we have to do + preprocessor tricks instead (which don't have exactly the right + semantics, but it's the best we can do). + + Example: + int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ + +#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4) + +# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) +# ifdef __cplusplus +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __THROW __asm__ (__ASMNAME (#alias)) +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __THROWNL __asm__ (__ASMNAME (#alias)) +# else +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROW +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROWNL +# endif +# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) +# define __ASMNAME2(prefix, cname) __STRING (prefix) cname + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __REDIRECT(name, proto, alias) name proto; \ + _Pragma("let " #name " = " #alias) +*/ +#endif + +/* GCC and clang have various useful declarations that can be made with + the '__attribute__' syntax. All of the ways we use this do fine if + they are omitted for compilers that don't understand it. */ +#if !(defined __GNUC__ || defined __clang__) +# define __attribute__(xyz) /* Ignore */ +#endif + +/* At some point during the gcc 2.96 development the `malloc' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__) +# define __attribute_malloc__ __attribute__ ((__malloc__)) +#else +# define __attribute_malloc__ /* Ignore */ +#endif + +/* Tell the compiler which arguments to an allocation function + indicate the size of the allocation. */ +#if __GNUC_PREREQ (4, 3) +# define __attribute_alloc_size__(params) \ + __attribute__ ((__alloc_size__ params)) +#else +# define __attribute_alloc_size__(params) /* Ignore. */ +#endif + +/* Tell the compiler which argument to an allocation function + indicates the alignment of the allocation. */ +#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__) +# define __attribute_alloc_align__(param) \ + __attribute__ ((__alloc_align__ param)) +#else +# define __attribute_alloc_align__(param) /* Ignore. */ +#endif + +/* At some point during the gcc 2.96 development the `pure' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__) +# define __attribute_pure__ __attribute__ ((__pure__)) +#else +# define __attribute_pure__ /* Ignore */ +#endif + +/* This declaration tells the compiler that the value is constant. */ +#if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__) +# define __attribute_const__ __attribute__ ((__const__)) +#else +# define __attribute_const__ /* Ignore */ +#endif + +#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__) +# define __attribute_maybe_unused__ __attribute__ ((__unused__)) +#else +# define __attribute_maybe_unused__ /* Ignore */ +#endif + +/* At some point during the gcc 3.1 development the `used' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__) +# define __attribute_used__ __attribute__ ((__used__)) +# define __attribute_noinline__ __attribute__ ((__noinline__)) +#else +# define __attribute_used__ __attribute__ ((__unused__)) +# define __attribute_noinline__ /* Ignore */ +#endif + +/* Since version 3.2, gcc allows marking deprecated functions. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__) +# define __attribute_deprecated__ __attribute__ ((__deprecated__)) +#else +# define __attribute_deprecated__ /* Ignore */ +#endif + +/* Since version 4.5, gcc also allows one to specify the message printed + when a deprecated function is used. clang claims to be gcc 4.2, but + may also support this feature. */ +#if __GNUC_PREREQ (4,5) \ + || __glibc_has_extension (__attribute_deprecated_with_message__) +# define __attribute_deprecated_msg__(msg) \ + __attribute__ ((__deprecated__ (msg))) +#else +# define __attribute_deprecated_msg__(msg) __attribute_deprecated__ +#endif + +/* At some point during the gcc 2.8 development the `format_arg' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. + If several `format_arg' attributes are given for the same function, in + gcc-3.0 and older, all but the last one are ignored. In newer gccs, + all designated arguments are considered. */ +#if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__) +# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) +#else +# define __attribute_format_arg__(x) /* Ignore */ +#endif + +/* At some point during the gcc 2.97 development the `strfmon' format + attribute for functions was introduced. We don't want to use it + unconditionally (although this would be possible) since it + generates warnings. */ +#if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__) +# define __attribute_format_strfmon__(a,b) \ + __attribute__ ((__format__ (__strfmon__, a, b))) +#else +# define __attribute_format_strfmon__(a,b) /* Ignore */ +#endif + +/* The nonnull function attribute marks pointer parameters that + must not be NULL. This has the name __nonnull in glibc, + and __attribute_nonnull__ in files shared with Gnulib to avoid + collision with a different __nonnull in DragonFlyBSD 5.9. */ +#ifndef __attribute_nonnull__ +# if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__) +# define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params)) +# else +# define __attribute_nonnull__(params) +# endif +#endif +#ifndef __nonnull +# define __nonnull(params) __attribute_nonnull__ (params) +#endif + +/* The returns_nonnull function attribute marks the return type of the function + as always being non-null. */ +#ifndef __returns_nonnull +# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__) +# define __returns_nonnull __attribute__ ((__returns_nonnull__)) +# else +# define __returns_nonnull +# endif +#endif + +/* If fortification mode, we warn about unused results of certain + function calls which can lead to problems. */ +#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__) +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 +# define __wur __attribute_warn_unused_result__ +# endif +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif +#ifndef __wur +# define __wur /* Ignore */ +#endif + +/* Forces a function to be always inlined. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__) +/* The Linux kernel defines __always_inline in stddef.h (283d7573), and + it conflicts with this definition. Therefore undefine it first to + allow either header to be included first. */ +# undef __always_inline +# define __always_inline __inline __attribute__ ((__always_inline__)) +#else +# undef __always_inline +# define __always_inline __inline +#endif + +/* Associate error messages with the source location of the call site rather + than with the source location inside the function. */ +#if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__) +# define __attribute_artificial__ __attribute__ ((__artificial__)) +#else +# define __attribute_artificial__ /* Ignore */ +#endif + +/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ + or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions + older than 4.3 may define these macros and still not guarantee GNU inlining + semantics. + + clang++ identifies itself as gcc-4.2, but has support for GNU inlining + semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and + __GNUC_GNU_INLINE__ macro definitions. */ +#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ + || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ + || defined __GNUC_GNU_INLINE__))) +# if defined __GNUC_STDC_INLINE__ || defined __cplusplus +# define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) +# define __extern_always_inline \ + extern __always_inline __attribute__ ((__gnu_inline__)) +# else +# define __extern_inline extern __inline +# define __extern_always_inline extern __always_inline +# endif +#endif + +#ifdef __extern_always_inline +# define __fortify_function __extern_always_inline __attribute_artificial__ +#endif + +/* GCC 4.3 and above allow passing all anonymous arguments of an + __extern_always_inline function to some other vararg function. */ +#if __GNUC_PREREQ (4,3) +# define __va_arg_pack() __builtin_va_arg_pack () +# define __va_arg_pack_len() __builtin_va_arg_pack_len () +#endif + +/* It is possible to compile containing GCC extensions even if GCC is + run in pedantic mode if the uses are carefully marked using the + `__extension__' keyword. But this is not generally available before + version 2.8. */ +#if !(__GNUC_PREREQ (2,8) || defined __clang__) +# define __extension__ /* Ignore */ +#endif + +/* __restrict is known in EGCS 1.2 and above, and in clang. + It works also in C++ mode (outside of arrays), but only when spelled + as '__restrict', not 'restrict'. */ +#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3) +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict restrict +# else +# define __restrict /* Ignore */ +# endif +#endif + +/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is + array_name[restrict] + GCC 3.1 and clang support this. + This syntax is not usable in C++ mode. */ +#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus +# define __restrict_arr __restrict +#else +# ifdef __GNUC__ +# define __restrict_arr /* Not supported in old GCC. */ +# else +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict_arr restrict +# else +/* Some other non-C99 compiler. */ +# define __restrict_arr /* Not supported. */ +# endif +# endif +#endif + +#if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect) +# define __glibc_unlikely(cond) __builtin_expect ((cond), 0) +# define __glibc_likely(cond) __builtin_expect ((cond), 1) +#else +# define __glibc_unlikely(cond) (cond) +# define __glibc_likely(cond) (cond) +#endif + +#if (!defined _Noreturn \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && !(__GNUC_PREREQ (4,7) \ + || (3 < __clang_major__ + (5 <= __clang_minor__)))) +# if __GNUC_PREREQ (2,8) +# define _Noreturn __attribute__ ((__noreturn__)) +# else +# define _Noreturn +# endif +#endif + +#if __GNUC_PREREQ (8, 0) +/* Describes a char array whose address can safely be passed as the first + argument to strncpy and strncat, as the char array is not necessarily + a NUL-terminated string. */ +# define __attribute_nonstring__ __attribute__ ((__nonstring__)) +#else +# define __attribute_nonstring__ +#endif + +/* Undefine (also defined in libc-symbols.h). */ +#undef __attribute_copy__ +#if __GNUC_PREREQ (9, 0) +/* Copies attributes from the declaration or type referenced by + the argument. */ +# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) +#else +# define __attribute_copy__(arg) +#endif + +#if (!defined _Static_assert && !defined __cplusplus \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \ + || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ + extern int (*__Static_assert_function (void)) \ + [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + +/* Gnulib avoids including these, as they don't work on non-glibc or + older glibc platforms. */ +#ifndef __GNULIB_CDEFS +# include <bits/wordsize.h> +# include <bits/long-double.h> +#endif + +#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# ifdef __REDIRECT + +/* Alias name defined automatically. */ +# define __LDBL_REDIR(name, proto) ... unused__ldbl_redir +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined automatically, with leading underscores. */ +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name \ + __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined manually. */ +# define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); + +# define __LDBL_REDIR1_NTH(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) + +/* Unused. */ +# define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl +# define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth + +# else +_Static_assert (0, "IEEE 128-bits long double requires redirection on this platform"); +# endif +#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH +# define __LDBL_COMPAT 1 +# ifdef __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) +# define __LDBL_REDIR(name, proto) \ + __LDBL_REDIR1 (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) +# define __LDBL_REDIR_NTH(name, proto) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name)); +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); +# define __REDIRECT_LDBL(name, proto, alias) \ + __LDBL_REDIR1 (name, proto, __nldbl_##alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) +# endif +#endif +#if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \ + || !defined __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) name proto +# define __LDBL_REDIR(name, proto) name proto +# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW +# define __LDBL_REDIR_NTH(name, proto) name proto __THROW +# define __LDBL_REDIR2_DECL(name) +# define __LDBL_REDIR_DECL(name) +# ifdef __REDIRECT +# define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# endif +#endif + +/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is + intended for use in preprocessor macros. + + Note: MESSAGE must be a _single_ string; concatenation of string + literals is not supported. */ +#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) +# define __glibc_macro_warning1(message) _Pragma (#message) +# define __glibc_macro_warning(message) \ + __glibc_macro_warning1 (GCC warning message) +#else +# define __glibc_macro_warning(msg) +#endif + +/* Generic selection (ISO C11) is a C-only feature, available in GCC + since version 4.9. Previous versions do not provide generic + selection, even though they might set __STDC_VERSION__ to 201112L, + when in -std=c11 mode. Thus, we must check for !defined __GNUC__ + when testing __STDC_VERSION__ for generic selection support. + On the other hand, Clang also defines __GNUC__, so a clang-specific + check is required to enable the use of generic selection. */ +#if !defined __cplusplus \ + && (__GNUC_PREREQ (4, 9) \ + || __glibc_has_extension (c_generic_selections) \ + || (!defined __GNUC__ && defined __STDC_VERSION__ \ + && __STDC_VERSION__ >= 201112L)) +# define __HAVE_GENERIC_SELECTION 1 +#else +# define __HAVE_GENERIC_SELECTION 0 +#endif + +#if __GNUC_PREREQ (10, 0) +/* Designates a 1-based positional argument ref-index of pointer type + that can be used to access size-index elements of the pointed-to + array according to access mode, or at least one element when + size-index is not provided: + access (access-mode, <ref-index> [, <size-index>]) */ +# define __attr_access(x) __attribute__ ((__access__ x)) +/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may + use the access attribute to get object sizes from function definition + arguments, so we can't use them on functions we fortify. Drop the object + size hints for such functions. */ +# if __USE_FORTIFY_LEVEL == 3 +# define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o))) +# else +# define __fortified_attr_access(a, o, s) __attr_access ((a, o, s)) +# endif +# if __GNUC_PREREQ (11, 0) +# define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) +# else +# define __attr_access_none(argno) +# endif +#else +# define __fortified_attr_access(a, o, s) +# define __attr_access(x) +# define __attr_access_none(argno) +#endif + +#if __GNUC_PREREQ (11, 0) +/* Designates dealloc as a function to call to deallocate objects + allocated by the declared function. */ +# define __attr_dealloc(dealloc, argno) \ + __attribute__ ((__malloc__ (dealloc, argno))) +# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1) +#else +# define __attr_dealloc(dealloc, argno) +# define __attr_dealloc_free +#endif + +/* Specify that a function such as setjmp or vfork may return + twice. */ +#if __GNUC_PREREQ (4, 1) +# define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) +#else +# define __attribute_returns_twice__ /* Ignore. */ +#endif + +#endif /* sys/cdefs.h */ diff --git a/tests/cloexec.c b/tests/cloexec.c index 812be01a..cdb0d740 100644 --- a/tests/cloexec.c +++ b/tests/cloexec.c @@ -1,6 +1,6 @@ /* cloexec.c - set or clear the close-on-exec descriptor flag - Copyright (C) 1991, 2004-2006, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 1991, 2004-2006, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/cloexec.h b/tests/cloexec.h index 15d2d5ef..f52e5f2e 100644 --- a/tests/cloexec.h +++ b/tests/cloexec.h @@ -1,6 +1,6 @@ /* cloexec.c - set or clear the close-on-exec descriptor flag - Copyright (C) 2004, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2004, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/close.c b/tests/close.c index 44990ba7..830fd820 100644 --- a/tests/close.c +++ b/tests/close.c @@ -1,5 +1,5 @@ /* close replacement. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/connect.c b/tests/connect.c index d1600634..421849c1 100644 --- a/tests/connect.c +++ b/tests/connect.c @@ -1,6 +1,6 @@ /* connect.c --- wrappers for Windows connect function - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/ctype.in.h b/tests/ctype.in.h index dc81170d..61bcbf16 100644 --- a/tests/ctype.in.h +++ b/tests/ctype.in.h @@ -1,6 +1,6 @@ /* A substitute for ISO C99 <ctype.h>, for platforms on which it is incomplete. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -36,6 +36,11 @@ #ifndef _@GUARD_PREFIX@_CTYPE_H #define _@GUARD_PREFIX@_CTYPE_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ diff --git a/tests/dup2.c b/tests/dup2.c index 1c766ab3..916e113d 100644 --- a/tests/dup2.c +++ b/tests/dup2.c @@ -1,6 +1,6 @@ /* Duplicate an open file descriptor to a specified file descriptor. - Copyright (C) 1999, 2004-2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 1999, 2004-2007, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/error.c b/tests/error.c index 272d45e4..c53dfeb6 100644 --- a/tests/error.c +++ b/tests/error.c @@ -1,5 +1,5 @@ /* Error handler for noninteractive utilities - Copyright (C) 1990-1998, 2000-2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 1990-1998, 2000-2007, 2009-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify @@ -19,9 +19,10 @@ #if !_LIBC # include <config.h> +# define _GL_NO_INLINE_ERROR #endif -#include "error.h" +#include <error.h> #include <stdarg.h> #include <stdio.h> @@ -42,8 +43,6 @@ # define USE_UNLOCKED_IO 0 # define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b) # define _GL_ARG_NONNULL(a) -#else -# include "getprogname.h" #endif #if USE_UNLOCKED_IO diff --git a/tests/error.h b/tests/error.h deleted file mode 100644 index 45ec2a5e..00000000 --- a/tests/error.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Declaration for error-reporting function - Copyright (C) 1995-1997, 2003, 2006, 2008-2022 Free Software Foundation, - Inc. - This file is part of the GNU C Library. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see <https://www.gnu.org/licenses/>. */ - -#ifndef _ERROR_H -#define _ERROR_H 1 - -/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */ -#include <stdio.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/* Print a message with 'fprintf (stderr, FORMAT, ...)'; - if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). - If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ - -extern void error (int __status, int __errnum, const char *__format, ...) -#if GNULIB_VFPRINTF_POSIX - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)) -#else - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 3, 4)) -#endif - ; - -extern void error_at_line (int __status, int __errnum, const char *__fname, - unsigned int __lineno, const char *__format, ...) -#if GNULIB_VFPRINTF_POSIX - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 5, 6)) -#else - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 5, 6)) -#endif - ; - -/* If NULL, error will flush stdout, then print on stderr the program - name, a colon and a space. Otherwise, error will call this - function without parameters instead. */ -extern void (*error_print_progname) (void); - -/* This variable is incremented each time 'error' is called. */ -extern unsigned int error_message_count; - -/* Sometimes we want to have at most one error per line. This - variable controls whether this mode is selected or not. */ -extern int error_one_per_line; - -#ifdef __cplusplus -} -#endif - -#endif /* error.h */ diff --git a/tests/error.in.h b/tests/error.in.h new file mode 100644 index 00000000..51f8cafd --- /dev/null +++ b/tests/error.in.h @@ -0,0 +1,216 @@ +/* Declarations for error-reporting functions. + Copyright (C) 1995-1997, 2003, 2006, 2008-2024 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_ERROR_H + +/* No @PRAGMA_SYSTEM_HEADER@ here, because it would prevent + -Wimplicit-fallthrough warnings for missing FALLTHROUGH after error(...) + or error_at_line(...) invocations. */ + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_ERROR_H@ +# @INCLUDE_NEXT@ @NEXT_ERROR_H@ +#endif + +#ifndef _@GUARD_PREFIX@_ERROR_H +#define _@GUARD_PREFIX@_ERROR_H + +/* This file uses _GL_ATTRIBUTE_ALWAYS_INLINE, _GL_ATTRIBUTE_FORMAT, + _GL_ATTRIBUTE_MAYBE_UNUSED. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get 'unreachable'. */ +#include <stddef.h> + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */ +#include <stdio.h> + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +#if GNULIB_VFPRINTF_POSIX +# define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD +#else +# define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM +#endif + +/* Helper macro for supporting the compiler's control flow analysis better. + It evaluates its arguments only once. + Test case: Compile copy-file.c with "gcc -Wimplicit-fallthrough". */ +#if defined __GNUC__ || defined __clang__ +/* Use 'unreachable' to tell the compiler when the function call does not + return. */ +# define __gl_error_call1(function, status, ...) \ + ((function) (status, __VA_ARGS__), \ + (status) != 0 ? unreachable () : (void) 0) +/* If STATUS is a not a constant, the function call may or may not return; + therefore -Wimplicit-fallthrough will produce a warning. Use a compound + statement in order to evaluate STATUS only once. + If STATUS is a constant, we don't use a compound statement, because that + would trigger a -Wimplicit-fallthrough warning even when STATUS is != 0, + when not optimizing. This causes STATUS to be evaluated twice, but + that's OK since it does not have side effects. */ +# define __gl_error_call(function, status, ...) \ + (__builtin_constant_p (status) \ + ? __gl_error_call1 (function, status, __VA_ARGS__) \ + : __extension__ \ + ({ \ + int const __errstatus = status; \ + __gl_error_call1 (function, __errstatus, __VA_ARGS__); \ + })) +#else +# define __gl_error_call(function, status, ...) \ + (function) (status, __VA_ARGS__) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Print a message with 'fprintf (stderr, FORMAT, ...)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ +#if @REPLACE_ERROR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef error +# define error rpl_error +# endif +_GL_FUNCDECL_RPL (error, void, + (int __status, int __errnum, const char *__format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); +_GL_CXXALIAS_RPL (error, void, + (int __status, int __errnum, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +# undef error +# define error(status, ...) \ + __gl_error_call (rpl_error, status, __VA_ARGS__) +# endif +#else +# if ! @HAVE_ERROR@ +_GL_FUNCDECL_SYS (error, void, + (int __status, int __errnum, const char *__format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); +# endif +_GL_CXXALIAS_SYS (error, void, + (int __status, int __errnum, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +# ifdef error +/* Only gcc ≥ 4.7 has __builtin_va_arg_pack. */ +# if _GL_GNUC_PREREQ (4, 7) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wattributes" +_GL_ATTRIBUTE_MAYBE_UNUSED +static void +_GL_ATTRIBUTE_ALWAYS_INLINE +_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4)) +_gl_inline_error (int __status, int __errnum, const char *__format, ...) +{ + return error (__status, __errnum, __format, __builtin_va_arg_pack ()); +} +# pragma GCC diagnostic pop +# undef error +# define error(status, ...) \ + __gl_error_call (_gl_inline_error, status, __VA_ARGS__) +# endif +# else +# define error(status, ...) \ + __gl_error_call (error, status, __VA_ARGS__) +# endif +# endif +#endif +#if __GLIBC__ >= 2 +_GL_CXXALIASWARN (error); +#endif + +/* Likewise. If FILENAME is non-NULL, include FILENAME:LINENO: in the + message. */ +#if @REPLACE_ERROR_AT_LINE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef error_at_line +# define error_at_line rpl_error_at_line +# endif +_GL_FUNCDECL_RPL (error_at_line, void, + (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); +_GL_CXXALIAS_RPL (error_at_line, void, + (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +# undef error_at_line +# define error_at_line(status, ...) \ + __gl_error_call (rpl_error_at_line, status, __VA_ARGS__) +# endif +#else +# if ! @HAVE_ERROR_AT_LINE@ +_GL_FUNCDECL_SYS (error_at_line, void, + (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); +# endif +_GL_CXXALIAS_SYS (error_at_line, void, + (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +# ifdef error_at_line +/* Only gcc ≥ 4.7 has __builtin_va_arg_pack. */ +# if _GL_GNUC_PREREQ (4, 7) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wattributes" +_GL_ATTRIBUTE_MAYBE_UNUSED +static void +_GL_ATTRIBUTE_ALWAYS_INLINE +_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6)) +_gl_inline_error_at_line (int __status, int __errnum, const char *__filename, + unsigned int __lineno, const char *__format, ...) +{ + return error_at_line (__status, __errnum, __filename, __lineno, __format, + __builtin_va_arg_pack ()); +} +# pragma GCC diagnostic pop +# undef error_at_line +# define error_at_line(status, ...) \ + __gl_error_call (_gl_inline_error_at_line, status, __VA_ARGS__) +# endif +# else +# define error_at_line(status, ...) \ + __gl_error_call (error_at_line, status, __VA_ARGS__) +# endif +# endif +#endif +_GL_CXXALIASWARN (error_at_line); + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +extern void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called. */ +extern unsigned int error_message_count; + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +extern int error_one_per_line; + +#ifdef __cplusplus +} +#endif + +#endif /* _@GUARD_PREFIX@_ERROR_H */ +#endif /* _@GUARD_PREFIX@_ERROR_H */ diff --git a/tests/exitfail.c b/tests/exitfail.c index 84fb0eff..8a5962e8 100644 --- a/tests/exitfail.c +++ b/tests/exitfail.c @@ -1,6 +1,6 @@ /* Failure exit status - Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2002-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/exitfail.h b/tests/exitfail.h index 865f096a..20ac506b 100644 --- a/tests/exitfail.h +++ b/tests/exitfail.h @@ -1,6 +1,6 @@ /* Failure exit status - Copyright (C) 2002, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/fcntl.c b/tests/fcntl.c index f9753c40..7cd3a0f9 100644 --- a/tests/fcntl.c +++ b/tests/fcntl.c @@ -1,6 +1,6 @@ /* Provide file descriptor control. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/fcntl.in.h b/tests/fcntl.in.h index 9270ced8..eea3b954 100644 --- a/tests/fcntl.in.h +++ b/tests/fcntl.in.h @@ -1,6 +1,6 @@ /* Like <fcntl.h>, but with non-working flags defined to 0. - Copyright (C) 2006-2022 Free Software Foundation, Inc. + Copyright (C) 2006-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -74,6 +74,11 @@ #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ # include <unistd.h> #endif diff --git a/tests/fd-hook.c b/tests/fd-hook.c index 64a7a80c..75bbe49c 100644 --- a/tests/fd-hook.c +++ b/tests/fd-hook.c @@ -1,5 +1,5 @@ /* Hook for making file descriptor functions close(), ioctl() extensible. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software: you can redistribute it and/or modify diff --git a/tests/fd-hook.h b/tests/fd-hook.h index d6c4964d..2150460b 100644 --- a/tests/fd-hook.h +++ b/tests/fd-hook.h @@ -1,5 +1,5 @@ /* Hook for making file descriptor functions close(), ioctl() extensible. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/fdopen.c b/tests/fdopen.c index f1c5dff1..5a8cd535 100644 --- a/tests/fdopen.c +++ b/tests/fdopen.c @@ -1,5 +1,5 @@ /* Open a stream with a given file descriptor. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/filename.h b/tests/filename.h index ab77ca2d..4f0f0fbc 100644 --- a/tests/filename.h +++ b/tests/filename.h @@ -1,5 +1,5 @@ /* Basic filename support macros. - Copyright (C) 2001-2022 Free Software Foundation, Inc. + Copyright (C) 2001-2024 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 diff --git a/tests/fstat.c b/tests/fstat.c index 3928c860..205d5aab 100644 --- a/tests/fstat.c +++ b/tests/fstat.c @@ -1,5 +1,5 @@ /* fstat() replacement. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/ftruncate.c b/tests/ftruncate.c index 4a9279b7..63947257 100644 --- a/tests/ftruncate.c +++ b/tests/ftruncate.c @@ -1,5 +1,5 @@ /* ftruncate emulations for native Windows. - Copyright (C) 1992-2022 Free Software Foundation, Inc. + Copyright (C) 1992-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/getcwd-lgpl.c b/tests/getcwd-lgpl.c index f449ac85..67ed2878 100644 --- a/tests/getcwd-lgpl.c +++ b/tests/getcwd-lgpl.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011-2022 Free Software Foundation, Inc. +/* Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is part of gnulib. This file is free software: you can redistribute it and/or modify @@ -45,12 +45,12 @@ typedef int dummy; char * rpl_getcwd (char *buf, size_t size) { - char *ptr; char *result; /* Handle single size operations. */ if (buf) { + /* Check SIZE argument. */ if (!size) { errno = EINVAL; @@ -79,7 +79,7 @@ rpl_getcwd (char *buf, size_t size) { char tmp[4032]; size = sizeof tmp; - ptr = getcwd (tmp, size); + char *ptr = getcwd (tmp, size); if (ptr) { result = strdup (ptr); @@ -95,7 +95,7 @@ rpl_getcwd (char *buf, size_t size) do { size <<= 1; - ptr = realloc (buf, size); + char *ptr = realloc (buf, size); if (ptr == NULL) { free (buf); diff --git a/tests/getdtablesize.c b/tests/getdtablesize.c index 793e0f88..762c100b 100644 --- a/tests/getdtablesize.c +++ b/tests/getdtablesize.c @@ -1,5 +1,5 @@ /* getdtablesize() function: Return maximum possible file descriptor value + 1. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify diff --git a/tests/getpagesize.c b/tests/getpagesize.c index a19669f6..d2031553 100644 --- a/tests/getpagesize.c +++ b/tests/getpagesize.c @@ -1,6 +1,6 @@ /* getpagesize emulation for systems where it cannot be done in a C macro. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/getprogname.c b/tests/getprogname.c index 62a48004..392a9a2f 100644 --- a/tests/getprogname.c +++ b/tests/getprogname.c @@ -1,5 +1,5 @@ /* Program name management. - Copyright (C) 2016-2022 Free Software Foundation, Inc. + Copyright (C) 2016-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -16,11 +16,10 @@ #include <config.h> -/* Specification. */ -#include "getprogname.h" +/* Specification. Also get __argv declaration. */ +#include <stdlib.h> #include <errno.h> /* get program_invocation_name declaration */ -#include <stdlib.h> /* get __argv declaration */ #ifdef _AIX # include <unistd.h> @@ -53,13 +52,12 @@ #if defined __SCO_VERSION__ || defined __sysv5__ # include <fcntl.h> -# include <stdlib.h> # include <string.h> #endif #include "basename-lgpl.h" -#ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ +#ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Solaris >= 11, Cygwin, Android API level >= 21 */ char const * getprogname (void) { @@ -214,7 +212,19 @@ getprogname (void) { char *s = strdup (last_component (buf.ps_pathptr)); if (s) - p = s; + { +# if defined __XPLINK__ && __CHARSET_LIB == 1 + /* The compiler option -qascii is in use. + https://makingdeveloperslivesbetter.wordpress.com/2022/01/07/is-z-os-ascii-or-ebcdic-yes/ + https://www.ibm.com/docs/en/zos/2.5.0?topic=features-macros-related-compiler-option-settings + So, convert the result from EBCDIC to ASCII. + https://www.ibm.com/docs/en/zos/2.5.0?topic=functions-e2a-s-convert-string-from-ebcdic-ascii */ + if (__e2a_s (s) == (size_t)-1) + free (s); + else +# endif + p = s; + } break; } } diff --git a/tests/getprogname.h b/tests/getprogname.h index 9a35e584..bee1c1a2 100644 --- a/tests/getprogname.h +++ b/tests/getprogname.h @@ -1,5 +1,5 @@ /* Program name management. - Copyright (C) 2016-2022 Free Software Foundation, Inc. + Copyright (C) 2016-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -19,22 +19,8 @@ #include <stdlib.h> -#ifdef __cplusplus -extern "C" { -#endif - -/* Return the base name of the executing program. - On native Windows this will usually end in ".exe" or ".EXE". */ -#ifndef HAVE_GETPROGNAME -extern char const *getprogname (void) -# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME - _GL_ATTRIBUTE_PURE -# endif - ; -#endif - -#ifdef __cplusplus -} +#if __GNUC__ || (__clang_major__ >= 4) +# warning "The include file getprogname.h is deprecated. Use <stdlib.h> instead." #endif #endif diff --git a/tests/gettext.h b/tests/gettext.h index b3577a04..39d5ae4d 100644 --- a/tests/gettext.h +++ b/tests/gettext.h @@ -1,5 +1,5 @@ /* Convenience header for conditional use of GNU <libintl.h>. - Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2022 Free Software + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify diff --git a/tests/gettimeofday.c b/tests/gettimeofday.c index 36c7920a..8dd26f73 100644 --- a/tests/gettimeofday.c +++ b/tests/gettimeofday.c @@ -1,6 +1,6 @@ /* Provide gettimeofday for systems that don't have it or for which it's broken. - Copyright (C) 2001-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2001-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -113,8 +113,10 @@ gettimeofday (struct timeval *restrict tv, void *restrict tz) ULONGLONG since_1970 = since_1601 - (ULONGLONG) 134774 * (ULONGLONG) 86400 * (ULONGLONG) 10000000; ULONGLONG microseconds_since_1970 = since_1970 / (ULONGLONG) 10; - tv->tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000; - tv->tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000; + *tv = (struct timeval) { + .tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000, + .tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000 + }; return 0; @@ -127,10 +129,7 @@ gettimeofday (struct timeval *restrict tv, void *restrict tz) struct timeval otv; int result = gettimeofday (&otv, (struct timezone *) tz); if (result == 0) - { - tv->tv_sec = otv.tv_sec; - tv->tv_usec = otv.tv_usec; - } + *tv = otv; # else int result = gettimeofday (tv, (struct timezone *) tz); # endif @@ -143,8 +142,7 @@ gettimeofday (struct timeval *restrict tv, void *restrict tz) # error "Only 1-second nominal clock resolution found. Is that intended?" \ "If so, compile with the -DOK_TO_USE_1S_CLOCK option." # endif - tv->tv_sec = time (NULL); - tv->tv_usec = 0; + *tv = (struct timeval) { .tv_sec = time (NULL), .tv_usec = 0 }; return 0; diff --git a/tests/glthread/thread.c b/tests/glthread/thread.c index 0b923c04..9c8c3035 100644 --- a/tests/glthread/thread.c +++ b/tests/glthread/thread.c @@ -1,5 +1,5 @@ /* Creating and controlling threads. - Copyright (C) 2005-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -139,9 +139,11 @@ gl_thread_self (void) /* Memory allocation failed. There is not much we can do. Have to busy-loop, waiting for the availability of memory. */ { - struct timespec ts; - ts.tv_sec = 1; - ts.tv_nsec = 0; + struct timespec ts = + { + .tv_sec = 1, + .tv_nsec = 0 + }; thrd_sleep (&ts, NULL); } } diff --git a/tests/glthread/thread.h b/tests/glthread/thread.h index 6d98f2d6..748bb045 100644 --- a/tests/glthread/thread.h +++ b/tests/glthread/thread.h @@ -1,5 +1,5 @@ /* Creating and controlling threads. - Copyright (C) 2005-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -70,6 +70,11 @@ #ifndef _GLTHREAD_THREAD_H #define _GLTHREAD_THREAD_H +/* This file uses _Noreturn, HAVE_THREADS_H, HAVE_PTHREAD_ATFORK. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #include <errno.h> #include <stdlib.h> @@ -125,6 +130,9 @@ extern _Noreturn void gl_thread_exit (void *return_value); # include <pthread.h> +/* Get intptr_t. */ +# include <stdint.h> + /* On IRIX, pthread_atfork is declared in <unistd.h>, not in <pthread.h>. */ # if defined __sgi # include <unistd.h> @@ -228,7 +236,7 @@ extern const gl_thread_t gl_null_thread; # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : (pthread_t) 0) # define gl_thread_self_pointer() \ - (pthread_in_use () ? (void *) pthread_self () : NULL) + (pthread_in_use () ? (void *) (intptr_t) (pthread_t) pthread_self () : NULL) # endif # define gl_thread_exit(RETVAL) \ (void) (pthread_in_use () ? (pthread_exit (RETVAL), 0) : 0) diff --git a/tests/glthread/yield.h b/tests/glthread/yield.h index f74267ea..29105cc2 100644 --- a/tests/glthread/yield.h +++ b/tests/glthread/yield.h @@ -1,5 +1,5 @@ /* Yielding the processor to other threads and processes. - Copyright (C) 2005-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/ialloc.c b/tests/ialloc.c index 43c10433..8564a15b 100644 --- a/tests/ialloc.c +++ b/tests/ialloc.c @@ -1,6 +1,6 @@ /* malloc with idx_t rather than size_t - Copyright 2021-2022 Free Software Foundation, Inc. + Copyright 2021-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/ialloc.h b/tests/ialloc.h index 37cf4bfb..2aa94ae7 100644 --- a/tests/ialloc.h +++ b/tests/ialloc.h @@ -1,6 +1,6 @@ /* ialloc.h -- malloc with idx_t rather than size_t - Copyright 2021-2022 Free Software Foundation, Inc. + Copyright 2021-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -18,15 +18,21 @@ #ifndef IALLOC_H_ #define IALLOC_H_ +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_COLD, + _GL_ATTRIBUTE_MALLOC. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #include "idx.h" #include <errno.h> #include <stdint.h> #include <stdlib.h> - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." +#if defined __CHERI_PURE_CAPABILITY__ +# include <cheri.h> #endif + _GL_INLINE_HEADER_BEGIN #ifndef IALLOC_INLINE # define IALLOC_INLINE _GL_INLINE @@ -43,6 +49,9 @@ _gl_alloc_nomem (void) return NULL; } +/* imalloc (size) is like malloc (size). + It returns a non-NULL pointer to size bytes of memory. + Upon failure, it returns NULL with errno set. */ IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * @@ -51,16 +60,32 @@ imalloc (idx_t s) return s <= SIZE_MAX ? malloc (s) : _gl_alloc_nomem (); } +/* irealloc (ptr, size) is like realloc (ptr, size). + It returns a non-NULL pointer to size bytes of memory. + Upon failure, it returns NULL with errno set. */ IALLOC_INLINE /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * irealloc (void *p, idx_t s) { - /* Work around GNU realloc glitch by treating a zero size as if it - were 1, so that returning NULL is equivalent to failing. */ - return s <= SIZE_MAX ? realloc (p, s | !s) : _gl_alloc_nomem (); + if (s <= SIZE_MAX) + { + /* Work around GNU realloc glitch by treating a zero size as if it + were 1, so that returning NULL is equivalent to failing. */ + p = realloc (p, s | !s); +#if defined __CHERI_PURE_CAPABILITY__ + if (p != NULL) + p = cheri_bounds_set (p, s); +#endif + return p; + } + else + return _gl_alloc_nomem (); } +/* icalloc (num, size) is like calloc (num, size). + It returns a non-NULL pointer to num * size bytes of memory. + Upon failure, it returns NULL with errno set. */ IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * @@ -81,20 +106,35 @@ icalloc (idx_t n, idx_t s) return calloc (n, s); } +/* ireallocarray (ptr, num, size) is like reallocarray (ptr, num, size). + It returns a non-NULL pointer to num * size bytes of memory. + Upon failure, it returns NULL with errno set. */ IALLOC_INLINE void * ireallocarray (void *p, idx_t n, idx_t s) { - /* Work around GNU reallocarray glitch by treating a zero size as if - it were 1, so that returning NULL is equivalent to failing. */ - if (n == 0 || s == 0) - n = s = 1; - return (n <= SIZE_MAX && s <= SIZE_MAX - ? reallocarray (p, n, s) - : _gl_alloc_nomem ()); + if (n <= SIZE_MAX && s <= SIZE_MAX) + { + /* Work around GNU reallocarray glitch by treating a zero size as if + it were 1, so that returning NULL is equivalent to failing. */ + size_t nx = n; + size_t sx = s; + if (n == 0 || s == 0) + nx = sx = 1; + p = reallocarray (p, nx, sx); +#if defined __CHERI_PURE_CAPABILITY__ + if (p != NULL && (n == 0 || s == 0)) + p = cheri_bounds_set (p, 0); +#endif + return p; + } + else + return _gl_alloc_nomem (); } #ifdef __cplusplus } #endif +_GL_INLINE_HEADER_END + #endif diff --git a/tests/iconvsupport.c b/tests/iconvsupport.c index ee2af0dd..e887eb0d 100644 --- a/tests/iconvsupport.c +++ b/tests/iconvsupport.c @@ -1,5 +1,5 @@ /* Test iconv support. - Copyright (C) 2018-2022 Free Software Foundation, Inc. + Copyright (C) 2018-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/ignore-value.h b/tests/ignore-value.h index 173b63f5..de4a240c 100644 --- a/tests/ignore-value.h +++ b/tests/ignore-value.h @@ -1,6 +1,6 @@ /* ignore a function return without a compiler warning. -*- coding: utf-8 -*- - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/inet_pton.c b/tests/inet_pton.c index a239b7d1..2d29608d 100644 --- a/tests/inet_pton.c +++ b/tests/inet_pton.c @@ -1,6 +1,6 @@ /* inet_pton.c -- convert IPv4 and IPv6 addresses from text to binary form - Copyright (C) 2006, 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2006, 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/infinity.h b/tests/infinity.h index 6f68f368..40e663ff 100644 --- a/tests/infinity.h +++ b/tests/infinity.h @@ -1,5 +1,5 @@ /* Macros for infinity. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/init.sh b/tests/init.sh index d5d37c98..c5ec5cfd 100644 --- a/tests/init.sh +++ b/tests/init.sh @@ -1,6 +1,6 @@ # source this file; set up for tests -# Copyright (C) 2009-2022 Free Software Foundation, Inc. +# Copyright (C) 2009-2024 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -434,15 +434,15 @@ setup_ () # Remove relative and non-accessible directories from PATH, including '.' # and Zero-length entries. - saved_IFS="$IFS" - IFS=: + saved_IFS="$IFS"; IFS="$PATH_SEPARATOR" new_PATH= - sep_= for dir in $PATH; do + IFS="$saved_IFS" case "$dir" in - /*) test -d "$dir/." || continue - new_PATH="${new_PATH}${sep_}${dir}" - sep_=':';; + [\\/]* | ?:[\\/]*) + test -d "$dir/." || continue + new_PATH="${new_PATH}${new_PATH:+$PATH_SEPARATOR}${dir}" + ;; esac done IFS="$saved_IFS" @@ -646,18 +646,19 @@ compare_dev_null_ () for diff_opt_ in -u -U3 -c '' no; do test "$diff_opt_" != no && - diff_out_=`exec 2>/dev/null; diff $diff_opt_ "$0" "$0" < /dev/null` && + diff_out_=`exec 2>/dev/null + LC_ALL=C diff $diff_opt_ "$0" "$0" < /dev/null` && break done if test "$diff_opt_" != no; then if test -z "$diff_out_"; then - compare_ () { diff $diff_opt_ "$@"; } + compare_ () { LC_ALL=C diff $diff_opt_ "$@"; } else compare_ () { # If no differences were found, AIX and HP-UX 'diff' produce output # like "No differences encountered". Hide this output. - diff $diff_opt_ "$@" > diff.out + LC_ALL=C diff $diff_opt_ "$@" > diff.out diff_status_=$? test $diff_status_ -eq 0 || cat diff.out || diff_status_=2 rm -f diff.out || diff_status_=2 @@ -702,4 +703,4 @@ test -f "$srcdir/init.cfg" \ setup_ "$@" # This trap is here, rather than in the setup_ function, because some # shells run the exit trap at shell function exit, rather than script exit. -trap remove_tmp_ 0 +trap remove_tmp_ EXIT diff --git a/tests/intprops-internal.h b/tests/intprops-internal.h index f6455f78..c8a87d2b 100644 --- a/tests/intprops-internal.h +++ b/tests/intprops-internal.h @@ -1,6 +1,6 @@ /* intprops-internal.h -- properties of integer types not visible to users - Copyright (C) 2001-2022 Free Software Foundation, Inc. + Copyright (C) 2001-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -20,6 +20,11 @@ #include <limits.h> +/* Pacify GCC 13.2 in some calls to _GL_EXPR_SIGNED. */ +#if defined __GNUC__ && 4 < __GNUC__ + (3 <= __GNUC_MINOR__) +# pragma GCC diagnostic ignored "-Wtype-limits" +#endif + /* Return a value with the common real type of E and V and the value of V. Do not evaluate E. */ #define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) diff --git a/tests/intprops.h b/tests/intprops.h index f182ddc1..43734f34 100644 --- a/tests/intprops.h +++ b/tests/intprops.h @@ -1,6 +1,6 @@ /* intprops.h -- properties of integer types - Copyright (C) 2001-2022 Free Software Foundation, Inc. + Copyright (C) 2001-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published diff --git a/tests/ioctl.c b/tests/ioctl.c index b1c7b2ee..3ee63fd8 100644 --- a/tests/ioctl.c +++ b/tests/ioctl.c @@ -1,6 +1,6 @@ /* ioctl.c --- wrappers for Windows ioctl function - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/isblank.c b/tests/isblank.c index e3545593..d16450aa 100644 --- a/tests/isblank.c +++ b/tests/isblank.c @@ -1,6 +1,6 @@ /* Test whether a character is a blank. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/libc-config.h b/tests/libc-config.h new file mode 100644 index 00000000..70114608 --- /dev/null +++ b/tests/libc-config.h @@ -0,0 +1,204 @@ +/* System definitions for code taken from the GNU C Library + + Copyright 2017-2024 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +/* This is intended to be a good-enough substitute for glibc system + macros like those defined in <sys/cdefs.h>, so that Gnulib code + shared with glibc can do this as the first #include: + + #ifndef _LIBC + # include <libc-config.h> + #endif + + When compiled as part of glibc this is a no-op; when compiled as + part of Gnulib this includes Gnulib's <config.h> and defines macros + that glibc library code would normally assume. + + Note: This header file MUST NOT be included by public header files + of Gnulib. */ + +#include <config.h> + +/* On glibc this includes <features.h> and <sys/cdefs.h> and #defines + _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 and + DragonFlyBSD 5.9 it includes <sys/cdefs.h> which defines __nonnull. + Elsewhere it is harmless. */ +#include <errno.h> + +/* From glibc <errno.h>. */ +#ifndef __set_errno +# define __set_errno(val) (errno = (val)) +#endif + +/* From glibc <features.h>. */ + +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#ifndef __glibc_clang_prereq +# if defined __clang_major__ && defined __clang_minor__ +# ifdef __apple_build_version__ +/* Apple for some reason renumbers __clang_major__ and __clang_minor__. + Gnulib code uses only __glibc_clang_prereq (3, 5); map it to + 6000000 <= __apple_build_version__. Support for other calls to + __glibc_clang_prereq can be added here as needed. */ +# define __glibc_clang_prereq(maj, min) \ + ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0) +# else +# define __glibc_clang_prereq(maj, min) \ + ((maj) < __clang_major__ + ((min) <= __clang_minor__)) +# endif +# else +# define __glibc_clang_prereq(maj, min) 0 +# endif +#endif + +#ifndef __attribute_nonnull__ +/* <sys/cdefs.h> either does not exist, or is too old for Gnulib. + Prepare to include <cdefs.h>, which is Gnulib's version of a + more-recent glibc <sys/cdefs.h>. */ + +/* Define _FEATURES_H so that <cdefs.h> does not include <features.h>. */ +# ifndef _FEATURES_H +# define _FEATURES_H 1 +# endif +/* Define __GNULIB_CDEFS so that <cdefs.h> does not attempt to include + nonexistent files. */ +# define __GNULIB_CDEFS +/* Undef the macros unconditionally defined by our copy of glibc + <sys/cdefs.h>, so that they do not clash with any system-defined + versions. */ +# undef _SYS_CDEFS_H +# undef __ASMNAME +# undef __ASMNAME2 +# undef __BEGIN_DECLS +# undef __CONCAT +# undef __END_DECLS +# undef __HAVE_GENERIC_SELECTION +# undef __LDBL_COMPAT +# undef __LDBL_REDIR +# undef __LDBL_REDIR1 +# undef __LDBL_REDIR1_DECL +# undef __LDBL_REDIR1_NTH +# undef __LDBL_REDIR2_DECL +# undef __LDBL_REDIR_DECL +# undef __LDBL_REDIR_NTH +# undef __LEAF +# undef __LEAF_ATTR +# undef __NTH +# undef __NTHNL +# undef __REDIRECT +# undef __REDIRECT_LDBL +# undef __REDIRECT_NTH +# undef __REDIRECT_NTHNL +# undef __REDIRECT_NTH_LDBL +# undef __STRING +# undef __THROW +# undef __THROWNL +# undef __attr_access +# undef __attr_access_none +# undef __attr_dealloc +# undef __attr_dealloc_free +# undef __attribute__ +# undef __attribute_alloc_align__ +# undef __attribute_alloc_size__ +# undef __attribute_artificial__ +# undef __attribute_const__ +# undef __attribute_deprecated__ +# undef __attribute_deprecated_msg__ +# undef __attribute_format_arg__ +# undef __attribute_format_strfmon__ +# undef __attribute_malloc__ +# undef __attribute_maybe_unused__ +# undef __attribute_noinline__ +# undef __attribute_nonstring__ +# undef __attribute_pure__ +# undef __attribute_returns_twice__ +# undef __attribute_used__ +# undef __attribute_warn_unused_result__ +# undef __errordecl +# undef __extension__ +# undef __extern_always_inline +# undef __extern_inline +# undef __flexarr +# undef __fortified_attr_access +# undef __fortify_function +# undef __glibc_c99_flexarr_available +# undef __glibc_has_attribute +# undef __glibc_has_builtin +# undef __glibc_has_extension +# undef __glibc_likely +# undef __glibc_macro_warning +# undef __glibc_macro_warning1 +# undef __glibc_unlikely +# undef __inline +# undef __ptr_t +# undef __restrict +# undef __restrict_arr +# undef __va_arg_pack +# undef __va_arg_pack_len +# undef __warnattr +# undef __wur +# ifndef __GNULIB_CDEFS +# undef __bos +# undef __bos0 +# undef __glibc_fortify +# undef __glibc_fortify_n +# undef __glibc_objsize +# undef __glibc_objsize0 +# undef __glibc_safe_len_cond +# undef __glibc_safe_or_unknown_len +# undef __glibc_unsafe_len +# undef __glibc_unsigned_or_positive +# endif + +/* Include our copy of glibc <sys/cdefs.h>. */ +# include <cdefs.h> + +/* <cdefs.h> __inline is too pessimistic for non-GCC. */ +# undef __inline +# ifndef HAVE___INLINE +# if 199901 <= __STDC_VERSION__ || defined inline +# define __inline inline +# else +# define __inline +# endif +# endif + +#endif /* defined __glibc_likely */ + + +/* A substitute for glibc <libc-symbols.h>, good enough for Gnulib. */ +#define attribute_hidden +#define libc_hidden_proto(name) +#define libc_hidden_def(name) +#define libc_hidden_weak(name) +#define libc_hidden_ver(local, name) +#define strong_alias(name, aliasname) +#define weak_alias(name, aliasname) + +/* A substitute for glibc <shlib-compat.h>, good enough for Gnulib. */ +#define SHLIB_COMPAT(lib, introduced, obsoleted) 0 +#define compat_symbol(lib, local, symbol, version) extern int dummy +#define versioned_symbol(lib, local, symbol, version) extern int dummy diff --git a/tests/listen.c b/tests/listen.c index e67bdc9e..785b1319 100644 --- a/tests/listen.c +++ b/tests/listen.c @@ -1,6 +1,6 @@ /* listen.c --- wrappers for Windows listen function - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/locale.c b/tests/locale.c index d7ae6103..bd2bc00e 100644 --- a/tests/locale.c +++ b/tests/locale.c @@ -1,5 +1,5 @@ /* Program that prints the names of the categories of the current locale. - Copyright (C) 2019-2022 Free Software Foundation, Inc. + Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/lstat.c b/tests/lstat.c index 472bfbce..7c09957e 100644 --- a/tests/lstat.c +++ b/tests/lstat.c @@ -1,6 +1,6 @@ /* Work around a bug of lstat on some systems - Copyright (C) 1997-2006, 2008-2022 Free Software Foundation, Inc. + Copyright (C) 1997-2006, 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/macros.h b/tests/macros.h index 7f5eb2de..d182cd6f 100644 --- a/tests/macros.h +++ b/tests/macros.h @@ -1,5 +1,5 @@ /* Common macros used by gnulib tests. - Copyright (C) 2006-2022 Free Software Foundation, Inc. + Copyright (C) 2006-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/malloc.c b/tests/malloc.c index f334dd6e..2a7867a1 100644 --- a/tests/malloc.c +++ b/tests/malloc.c @@ -1,6 +1,6 @@ /* malloc() function that is glibc compatible. - Copyright (C) 1997-1998, 2006-2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 1997-1998, 2006-2007, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/mbtowc-impl.h b/tests/mbtowc-impl.h index 2b27bafd..92efb4a7 100644 --- a/tests/mbtowc-impl.h +++ b/tests/mbtowc-impl.h @@ -1,5 +1,5 @@ /* Convert multibyte character to wide character. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify @@ -30,7 +30,7 @@ mbtowc (wchar_t *pwc, const char *s, size_t n) wchar_t wc; size_t result; - memset (&state, 0, sizeof (mbstate_t)); + mbszero (&state); result = mbrtowc (&wc, s, n, &state); if (result == (size_t)-1 || result == (size_t)-2) { diff --git a/tests/mbtowc.c b/tests/mbtowc.c index a9a79951..31a2d635 100644 --- a/tests/mbtowc.c +++ b/tests/mbtowc.c @@ -1,5 +1,5 @@ /* Convert multibyte character to wide character. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify diff --git a/tests/minus-zero.h b/tests/minus-zero.h index d43d8e32..73a388f6 100644 --- a/tests/minus-zero.h +++ b/tests/minus-zero.h @@ -1,5 +1,5 @@ /* Macros for floating-point negative zero. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/msvc-inval.c b/tests/msvc-inval.c index d6651caa..da3fc86a 100644 --- a/tests/msvc-inval.c +++ b/tests/msvc-inval.c @@ -1,5 +1,5 @@ /* Invalid parameter handler for MSVC runtime libraries. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/msvc-inval.h b/tests/msvc-inval.h index 1230b899..7aee6e5d 100644 --- a/tests/msvc-inval.h +++ b/tests/msvc-inval.h @@ -1,5 +1,5 @@ /* Invalid parameter handler for MSVC runtime libraries. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -52,6 +52,11 @@ AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ +/* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 diff --git a/tests/msvc-nothrow.c b/tests/msvc-nothrow.c index aa069643..06b35a61 100644 --- a/tests/msvc-nothrow.c +++ b/tests/msvc-nothrow.c @@ -1,6 +1,6 @@ /* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/msvc-nothrow.h b/tests/msvc-nothrow.h index 53451557..dc6dd35d 100644 --- a/tests/msvc-nothrow.h +++ b/tests/msvc-nothrow.h @@ -1,6 +1,6 @@ /* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -25,6 +25,11 @@ This file defines wrappers that turn such an invalid parameter notification into an error code. */ +/* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #if defined _WIN32 && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ diff --git a/tests/nan.h b/tests/nan.h index 6a3a239a..d540a0bb 100644 --- a/tests/nan.h +++ b/tests/nan.h @@ -1,5 +1,5 @@ -/* Macros for not-a-number. - Copyright (C) 2007-2022 Free Software Foundation, Inc. +/* Macros for quiet not-a-number. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -14,6 +14,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ +#ifndef _GL_NAN_H +#define _GL_NAN_H + /* IBM z/OS supports both hexadecimal and IEEE floating-point formats. The former does not support NaN and its isnan() implementation returns zero @@ -26,14 +29,15 @@ /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. - PGI 16.10 complains. */ + PGI 16.10 complains. clang 13 on mips64 does incorrect constant-folding. */ #if (defined __DECC || defined _MSC_VER \ - || (defined __MVS__ && defined __IBMC__) \ - || defined __PGI) + || (defined __MVS__ && defined __IBMC__) \ + || defined __PGI \ + || defined __mips__) static float NaNf () { - static float zero = 0.0f; + static float volatile zero = 0.0f; return zero / zero; } #else @@ -45,14 +49,15 @@ NaNf () /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. - PGI 16.10 complains. */ + PGI 16.10 complains. clang 13 on mips64 does incorrect constant-folding. */ #if (defined __DECC || defined _MSC_VER \ - || (defined __MVS__ && defined __IBMC__) \ - || defined __PGI) + || (defined __MVS__ && defined __IBMC__) \ + || defined __PGI \ + || defined __mips__) static double NaNd () { - static double zero = 0.0; + static double volatile zero = 0.0; return zero / zero; } #else @@ -66,20 +71,27 @@ NaNd () runtime type conversion. The Microsoft MSVC 9 compiler chokes on the expression 0.0L / 0.0L. The IBM XL C compiler on z/OS complains. - PGI 16.10 complains. */ + PGI 16.10 complains. + Avoid possible incorrect constant-folding on mips. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } -#elif defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI +#elif (defined _MSC_VER \ + || (defined __MVS__ && defined __IBMC__) \ + || defined __PGI \ + || defined __mips__) static long double NaNl () { - static long double zero = 0.0L; + static long double volatile zero = 0.0L; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif + + +#endif /* _GL_NAN_H */ diff --git a/tests/nanosleep.c b/tests/nanosleep.c index 55d6fa65..c6a76ec0 100644 --- a/tests/nanosleep.c +++ b/tests/nanosleep.c @@ -1,6 +1,6 @@ /* Provide a replacement for the POSIX nanosleep function. - Copyright (C) 1999-2000, 2002, 2004-2022 Free Software Foundation, Inc. + Copyright (C) 1999-2000, 2002, 2004-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -60,8 +60,7 @@ nanosleep (const struct timespec *requested_delay, static_assert (TYPE_MAXIMUM (time_t) / 24 / 24 / 60 / 60); const time_t limit = 24 * 24 * 60 * 60; time_t seconds = requested_delay->tv_sec; - struct timespec intermediate; - intermediate.tv_nsec = requested_delay->tv_nsec; + struct timespec intermediate = *requested_delay; while (limit < seconds) { diff --git a/tests/nap.h b/tests/nap.h index 37f8009c..cf7d998b 100644 --- a/tests/nap.h +++ b/tests/nap.h @@ -1,5 +1,5 @@ /* Assist in file system timestamp tests. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/netinet_in.in.h b/tests/netinet_in.in.h index e23807ca..4e9f6f2d 100644 --- a/tests/netinet_in.in.h +++ b/tests/netinet_in.in.h @@ -1,5 +1,5 @@ /* Substitute for <netinet/in.h>. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/open.c b/tests/open.c index 170bff10..e690c9ea 100644 --- a/tests/open.c +++ b/tests/open.c @@ -1,5 +1,5 @@ /* Open a descriptor to a file. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -38,9 +38,13 @@ orig_open (const char *filename, int flags, mode_t mode) } /* Specification. */ +#ifdef __osf__ /* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <fcntl.h> above. */ -#include "fcntl.h" +# include "fcntl.h" +#else +# include <fcntl.h> +#endif #include "cloexec.h" diff --git a/tests/pathmax.h b/tests/pathmax.h index 19b93d7e..d6512c6f 100644 --- a/tests/pathmax.h +++ b/tests/pathmax.h @@ -1,5 +1,5 @@ /* Define PATH_MAX somehow. Requires sys/types.h. - Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2022 Free Software + Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify @@ -39,6 +39,11 @@ #endif */ +/* This file uses HAVE_SYS_PARAM_H. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + # include <unistd.h> # include <limits.h> diff --git a/tests/perror.c b/tests/perror.c index 977a9a55..f29cd031 100644 --- a/tests/perror.c +++ b/tests/perror.c @@ -1,5 +1,5 @@ /* Print a message describing error code. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. This file is free software: you can redistribute it and/or modify diff --git a/tests/pipe.c b/tests/pipe.c index ce909b9f..fa6db541 100644 --- a/tests/pipe.c +++ b/tests/pipe.c @@ -1,5 +1,5 @@ /* Create a pipe. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/pselect.c b/tests/pselect.c index a1eca0c6..54732e5c 100644 --- a/tests/pselect.c +++ b/tests/pselect.c @@ -1,6 +1,6 @@ /* pselect - synchronous I/O multiplexing - Copyright 2011-2022 Free Software Foundation, Inc. + Copyright 2011-2024 Free Software Foundation, Inc. This file is part of gnulib. @@ -45,6 +45,12 @@ pselect (int nfds, fd_set *restrict rfds, sigset_t origmask; struct timeval tv, *tvp; + if (nfds < 0 || nfds > FD_SETSIZE) + { + errno = EINVAL; + return -1; + } + if (timeout) { if (! (0 <= timeout->tv_nsec && timeout->tv_nsec < 1000000000)) @@ -53,8 +59,10 @@ pselect (int nfds, fd_set *restrict rfds, return -1; } - tv.tv_sec = timeout->tv_sec; - tv.tv_usec = (timeout->tv_nsec + 999) / 1000; + tv = (struct timeval) { + .tv_sec = timeout->tv_sec, + .tv_usec = (timeout->tv_nsec + 999) / 1000 + }; tvp = &tv; } else diff --git a/tests/pthread-thread.c b/tests/pthread-thread.c index a5f07fb2..b81748d1 100644 --- a/tests/pthread-thread.c +++ b/tests/pthread-thread.c @@ -1,5 +1,5 @@ /* Creating and controlling POSIX threads. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/pthread.in.h b/tests/pthread.in.h index cf9ca3a4..cd705fbd 100644 --- a/tests/pthread.in.h +++ b/tests/pthread.in.h @@ -1,6 +1,6 @@ /* Implement the most essential subset of POSIX 1003.1-2008 pthread.h. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -51,6 +51,12 @@ #ifndef _@GUARD_PREFIX@_PTHREAD_H_ #define _@GUARD_PREFIX@_PTHREAD_H_ +/* This file uses _Noreturn, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #define __need_system_stdlib_h #include <stdlib.h> #undef __need_system_stdlib_h @@ -409,7 +415,21 @@ typedef pthread_mutex_t pthread_spinlock_t; # define PTHREAD_PROCESS_PRIVATE 0 # define PTHREAD_PROCESS_SHARED 1 #else -# if !@HAVE_PTHREAD_SPINLOCK_T@ +# if @HAVE_PTHREAD_SPINLOCK_T@ +/* <pthread.h> exists and defines pthread_spinlock_t. */ +# if !(((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \ + || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \ + || (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \ + && !defined __ANDROID__) \ + || __clang_major__ >= 3)) \ + && !defined __ibmxl__) +/* We can't use GCC built-ins. Approximate spinlocks with mutexes. */ +# if !GNULIB_defined_pthread_spin_types +# define pthread_spinlock_t pthread_mutex_t +# define GNULIB_defined_pthread_spin_types 1 +# endif +# endif +# else /* Approximate spinlocks with mutexes. */ # if !GNULIB_defined_pthread_spin_types typedef pthread_mutex_t pthread_spinlock_t; diff --git a/tests/pthread_sigmask.c b/tests/pthread_sigmask.c index cd4eb807..3b6e6e45 100644 --- a/tests/pthread_sigmask.c +++ b/tests/pthread_sigmask.c @@ -1,5 +1,5 @@ /* POSIX compatible signal blocking for threads. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/putenv.c b/tests/putenv.c index b0d27e2f..2ab6f248 100644 --- a/tests/putenv.c +++ b/tests/putenv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2022 Free Software +/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2024 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C diff --git a/tests/raise.c b/tests/raise.c index 385ddd38..891f355a 100644 --- a/tests/raise.c +++ b/tests/raise.c @@ -1,6 +1,6 @@ /* Provide a non-threads replacement for the POSIX raise function. - Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2002-2003, 2005-2006, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/random.c b/tests/random.c new file mode 100644 index 00000000..97ba1691 --- /dev/null +++ b/tests/random.c @@ -0,0 +1,317 @@ +/* Copyright (C) 1995-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* + * This is derived from the Berkeley source: + * @(#)random.c 5.5 (Berkeley) 7/6/88 + * It was reworked for the GNU C Library by Roland McGrath. + * Rewritten to use reentrant functions by Ulrich Drepper, 1995. + */ + +/* + Copyright (C) 1983 Regents of the University of California. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE.*/ + +#ifndef _LIBC +# include <libc-config.h> +# define __srandom srandom +# define __initstate initstate +# define __setstate setstate +# define __random random +# define __srandom_r srandom_r +# define __initstate_r initstate_r +# define __setstate_r setstate_r +# define __random_r random_r +#endif + +/* Specification. */ +#include <stdlib.h> + +#ifdef _LIBC +# include <libc-lock.h> +#else +# include "glthread/lock.h" +# define __libc_lock_define_initialized gl_lock_define_initialized +# define __libc_lock_lock gl_lock_lock +# define __libc_lock_unlock gl_lock_unlock +#endif + +/* An improved random number generation package. In addition to the standard + rand()/srand() like interface, this package also has a special state info + interface. The initstate() routine is called with a seed, an array of + bytes, and a count of how many bytes are being passed in; this array is + then initialized to contain information for random number generation with + that much state information. Good sizes for the amount of state + information are 32, 64, 128, and 256 bytes. The state can be switched by + calling the setstate() function with the same array as was initialized + with initstate(). By default, the package runs with 128 bytes of state + information and generates far better random numbers than a linear + congruential generator. If the amount of state information is less than + 32 bytes, a simple linear congruential R.N.G. is used. Internally, the + state information is treated as an array of longs; the zeroth element of + the array is the type of R.N.G. being used (small integer); the remainder + of the array is the state information for the R.N.G. Thus, 32 bytes of + state information will give 7 longs worth of state information, which will + allow a degree seven polynomial. (Note: The zeroth word of state + information also has some other information stored in it; see setstate + for details). The random number generation technique is a linear feedback + shift register approach, employing trinomials (since there are fewer terms + to sum up that way). In this approach, the least significant bit of all + the numbers in the state table will act as a linear feedback shift register, + and will have period 2^deg - 1 (where deg is the degree of the polynomial + being used, assuming that the polynomial is irreducible and primitive). + The higher order bits will have longer periods, since their values are + also influenced by pseudo-random carries out of the lower bits. The + total period of the generator is approximately deg*(2**deg - 1); thus + doubling the amount of state information has a vast influence on the + period of the generator. Note: The deg*(2**deg - 1) is an approximation + only good for large deg, when the period of the shift register is the + dominant factor. With deg equal to seven, the period is actually much + longer than the 7*(2**7 - 1) predicted by this formula. */ + + + +/* For each of the currently supported random number generators, we have a + break value on the amount of state information (you need at least this many + bytes of state info to support this random number generator), a degree for + the polynomial (actually a trinomial) that the R.N.G. is based on, and + separation between the two lower order coefficients of the trinomial. */ + +/* Linear congruential. */ +#define TYPE_0 0 +#define BREAK_0 8 +#define DEG_0 0 +#define SEP_0 0 + +/* x**7 + x**3 + 1. */ +#define TYPE_1 1 +#define BREAK_1 32 +#define DEG_1 7 +#define SEP_1 3 + +/* x**15 + x + 1. */ +#define TYPE_2 2 +#define BREAK_2 64 +#define DEG_2 15 +#define SEP_2 1 + +/* x**31 + x**3 + 1. */ +#define TYPE_3 3 +#define BREAK_3 128 +#define DEG_3 31 +#define SEP_3 3 + +/* x**63 + x + 1. */ +#define TYPE_4 4 +#define BREAK_4 256 +#define DEG_4 63 +#define SEP_4 1 + + +/* Array versions of the above information to make code run faster. + Relies on fact that TYPE_i == i. */ + +#define MAX_TYPES 5 /* Max number of types above. */ + + +/* Initially, everything is set up as if from: + initstate(1, randtbl, 128); + Note that this initialization takes advantage of the fact that srandom + advances the front and rear pointers 10*rand_deg times, and hence the + rear pointer which starts at 0 will also end up at zero; thus the zeroth + element of the state information, which contains info about the current + position of the rear pointer is just + (MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3. */ + +static int32_t randtbl[DEG_3 + 1] = + { + TYPE_3, + + -1726662223, 379960547, 1735697613, 1040273694, 1313901226, + 1627687941, -179304937, -2073333483, 1780058412, -1989503057, + -615974602, 344556628, 939512070, -1249116260, 1507946756, + -812545463, 154635395, 1388815473, -1926676823, 525320961, + -1009028674, 968117788, -123449607, 1284210865, 435012392, + -2017506339, -911064859, -370259173, 1132637927, 1398500161, + -205601318, + }; + + +static struct random_data unsafe_state = + { +/* FPTR and RPTR are two pointers into the state info, a front and a rear + pointer. These two pointers are always rand_sep places apart, as they + cycle through the state information. (Yes, this does mean we could get + away with just one pointer, but the code for random is more efficient + this way). The pointers are left positioned as they would be from the call: + initstate(1, randtbl, 128); + (The position of the rear pointer, rptr, is really 0 (as explained above + in the initialization of randtbl) because the state table pointer is set + to point to randtbl[1] (as explained below).) */ + + .fptr = &randtbl[SEP_3 + 1], + .rptr = &randtbl[1], + +/* The following things are the pointer to the state information table, + the type of the current generator, the degree of the current polynomial + being used, and the separation between the two pointers. + Note that for efficiency of random, we remember the first location of + the state information, not the zeroth. Hence it is valid to access + state[-1], which is used to store the type of the R.N.G. + Also, we remember the last location, since this is more efficient than + indexing every time to find the address of the last element to see if + the front and rear pointers have wrapped. */ + + .state = &randtbl[1], + + .rand_type = TYPE_3, + .rand_deg = DEG_3, + .rand_sep = SEP_3, + + .end_ptr = &randtbl[sizeof (randtbl) / sizeof (randtbl[0])] +}; + +/* POSIX.1c requires that there is mutual exclusion for the 'rand' and + 'srand' functions to prevent concurrent calls from modifying common + data. */ +__libc_lock_define_initialized (static, lock) + +/* Initialize the random number generator based on the given seed. If the + type is the trivial no-state-information type, just remember the seed. + Otherwise, initializes state[] based on the given "seed" via a linear + congruential generator. Then, the pointers are set to known locations + that are exactly rand_sep places apart. Lastly, it cycles the state + information a given number of times to get rid of any initial dependencies + introduced by the L.C.R.N.G. Note that the initialization of randtbl[] + for default usage relies on values produced by this routine. */ +void +__srandom (unsigned int x) +{ + __libc_lock_lock (lock); + (void) __srandom_r (x, &unsafe_state); + __libc_lock_unlock (lock); +} + +weak_alias (__srandom, srandom) +weak_alias (__srandom, srand) + +/* Initialize the state information in the given array of N bytes for + future random number generation. Based on the number of bytes we + are given, and the break values for the different R.N.G.'s, we choose + the best (largest) one we can and set things up for it. srandom is + then called to initialize the state information. Note that on return + from srandom, we set state[-1] to be the type multiplexed with the current + value of the rear pointer; this is so successive calls to initstate won't + lose this information and will be able to restart with setstate. + Note: The first thing we do is save the current state, if any, just like + setstate so that it doesn't matter when initstate is called. + Returns a pointer to the old state. */ +char * +__initstate (unsigned int seed, char *arg_state, size_t n) +{ + int32_t *ostate; + int ret; + + __libc_lock_lock (lock); + + ostate = &unsafe_state.state[-1]; + + ret = __initstate_r (seed, arg_state, n, &unsafe_state); + + __libc_lock_unlock (lock); + + return ret == -1 ? NULL : (char *) ostate; +} + +weak_alias (__initstate, initstate) + +/* Restore the state from the given state array. + Note: It is important that we also remember the locations of the pointers + in the current state information, and restore the locations of the pointers + from the old state information. This is done by multiplexing the pointer + location into the zeroth word of the state information. Note that due + to the order in which things are done, it is OK to call setstate with the + same state as the current state + Returns a pointer to the old state information. */ +char * +__setstate (char *arg_state) +{ + int32_t *ostate; + + __libc_lock_lock (lock); + + ostate = &unsafe_state.state[-1]; + + if (__setstate_r (arg_state, &unsafe_state) < 0) + ostate = NULL; + + __libc_lock_unlock (lock); + + return (char *) ostate; +} + +weak_alias (__setstate, setstate) + +/* If we are using the trivial TYPE_0 R.N.G., just do the old linear + congruential bit. Otherwise, we do our fancy trinomial stuff, which is the + same in all the other cases due to all the global variables that have been + set up. The basic operation is to add the number at the rear pointer into + the one at the front pointer. Then both pointers are advanced to the next + location cyclically in the table. The value returned is the sum generated, + reduced to 31 bits by throwing away the "least random" low bit. + Note: The code takes advantage of the fact that both the front and + rear pointers can't wrap on the same call by not testing the rear + pointer if the front one has wrapped. Returns a 31-bit random number. */ + +long int +__random (void) +{ + int32_t retval; + + __libc_lock_lock (lock); + + (void) __random_r (&unsafe_state, &retval); + + __libc_lock_unlock (lock); + + return retval; +} + +weak_alias (__random, random) diff --git a/tests/random_r.c b/tests/random_r.c new file mode 100644 index 00000000..b0ab81ac --- /dev/null +++ b/tests/random_r.c @@ -0,0 +1,430 @@ +/* + Copyright (C) 1995-2024 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* + Copyright (C) 1983 Regents of the University of California. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE.*/ + +/* + * This is derived from the Berkeley source: + * @(#)random.c 5.5 (Berkeley) 7/6/88 + * It was reworked for the GNU C Library by Roland McGrath. + * Rewritten to be reentrant by Ulrich Drepper, 1995 + */ + +#ifndef _LIBC +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the buf == NULL, arg_state == NULL, result == NULL tests + below. */ +# define _GL_ARG_NONNULL(params) + +# include <libc-config.h> +# define __srandom_r srandom_r +# define __initstate_r initstate_r +# define __setstate_r setstate_r +# define __random_r random_r +#endif + +/* Specification. */ +#include <stdlib.h> + +#include <errno.h> +#include <stddef.h> +#include <string.h> + + +/* An improved random number generation package. In addition to the standard + rand()/srand() like interface, this package also has a special state info + interface. The initstate() routine is called with a seed, an array of + bytes, and a count of how many bytes are being passed in; this array is + then initialized to contain information for random number generation with + that much state information. Good sizes for the amount of state + information are 32, 64, 128, and 256 bytes. The state can be switched by + calling the setstate() function with the same array as was initialized + with initstate(). By default, the package runs with 128 bytes of state + information and generates far better random numbers than a linear + congruential generator. If the amount of state information is less than + 32 bytes, a simple linear congruential R.N.G. is used. Internally, the + state information is treated as an array of longs; the zeroth element of + the array is the type of R.N.G. being used (small integer); the remainder + of the array is the state information for the R.N.G. Thus, 32 bytes of + state information will give 7 longs worth of state information, which will + allow a degree seven polynomial. (Note: The zeroth word of state + information also has some other information stored in it; see setstate + for details). The random number generation technique is a linear feedback + shift register approach, employing trinomials (since there are fewer terms + to sum up that way). In this approach, the least significant bit of all + the numbers in the state table will act as a linear feedback shift register, + and will have period 2^deg - 1 (where deg is the degree of the polynomial + being used, assuming that the polynomial is irreducible and primitive). + The higher order bits will have longer periods, since their values are + also influenced by pseudo-random carries out of the lower bits. The + total period of the generator is approximately deg*(2**deg - 1); thus + doubling the amount of state information has a vast influence on the + period of the generator. Note: The deg*(2**deg - 1) is an approximation + only good for large deg, when the period of the shift register is the + dominant factor. With deg equal to seven, the period is actually much + longer than the 7*(2**7 - 1) predicted by this formula. */ + + + +/* For each of the currently supported random number generators, we have a + break value on the amount of state information (you need at least this many + bytes of state info to support this random number generator), a degree for + the polynomial (actually a trinomial) that the R.N.G. is based on, and + separation between the two lower order coefficients of the trinomial. */ + +/* Linear congruential. */ +#define TYPE_0 0 +#define BREAK_0 8 +#define DEG_0 0 +#define SEP_0 0 + +/* x**7 + x**3 + 1. */ +#define TYPE_1 1 +#define BREAK_1 32 +#define DEG_1 7 +#define SEP_1 3 + +/* x**15 + x + 1. */ +#define TYPE_2 2 +#define BREAK_2 64 +#define DEG_2 15 +#define SEP_2 1 + +/* x**31 + x**3 + 1. */ +#define TYPE_3 3 +#define BREAK_3 128 +#define DEG_3 31 +#define SEP_3 3 + +/* x**63 + x + 1. */ +#define TYPE_4 4 +#define BREAK_4 256 +#define DEG_4 63 +#define SEP_4 1 + + +/* Array versions of the above information to make code run faster. + Relies on fact that TYPE_i == i. */ + +#define MAX_TYPES 5 /* Max number of types above. */ + +struct random_poly_info +{ + int seps[MAX_TYPES]; + int degrees[MAX_TYPES]; +}; + +static const struct random_poly_info random_poly_info = +{ + { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }, + { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 } +}; + +static int32_t +get_int32 (void *p) +{ + int32_t v; + memcpy (&v, p, sizeof v); + return v; +} + +static void +set_int32 (void *p, int32_t v) +{ + memcpy (p, &v, sizeof v); +} + + +/* Initialize the random number generator based on the given seed. If the + type is the trivial no-state-information type, just remember the seed. + Otherwise, initializes state[] based on the given "seed" via a linear + congruential generator. Then, the pointers are set to known locations + that are exactly rand_sep places apart. Lastly, it cycles the state + information a given number of times to get rid of any initial dependencies + introduced by the L.C.R.N.G. Note that the initialization of randtbl[] + for default usage relies on values produced by this routine. */ +int +__srandom_r (unsigned int seed, struct random_data *buf) +{ + int type; + int32_t *state; + long int i; + int32_t word; + int32_t *dst; + int kc; + + if (buf == NULL) + goto fail; + type = buf->rand_type; + if ((unsigned int) type >= MAX_TYPES) + goto fail; + + state = buf->state; + /* We must make sure the seed is not 0. Take arbitrarily 1 in this case. */ + if (seed == 0) + seed = 1; + set_int32 (&state[0], seed); + if (type == TYPE_0) + goto done; + + dst = state; + word = seed; + kc = buf->rand_deg; + for (i = 1; i < kc; ++i) + { + /* This does: + state[i] = (16807 * state[i - 1]) % 2147483647; + but avoids overflowing 31 bits. */ + long int hi = word / 127773; + long int lo = word % 127773; + word = 16807 * lo - 2836 * hi; + if (word < 0) + word += 2147483647; + set_int32 (++dst, word); + } + + buf->fptr = &state[buf->rand_sep]; + buf->rptr = &state[0]; + kc *= 10; + while (--kc >= 0) + { + int32_t discard; + (void) __random_r (buf, &discard); + } + + done: + return 0; + + fail: + return -1; +} + +weak_alias (__srandom_r, srandom_r) + +/* Initialize the state information in the given array of N bytes for + future random number generation. Based on the number of bytes we + are given, and the break values for the different R.N.G.'s, we choose + the best (largest) one we can and set things up for it. srandom is + then called to initialize the state information. Note that on return + from srandom, we set state[-1] to be the type multiplexed with the current + value of the rear pointer; this is so successive calls to initstate won't + lose this information and will be able to restart with setstate. + Note: The first thing we do is save the current state, if any, just like + setstate so that it doesn't matter when initstate is called. + Returns 0 on success, non-zero on failure. */ +int +__initstate_r (unsigned int seed, char *arg_state, size_t n, + struct random_data *buf) +{ + if (buf == NULL) + goto fail; + + int32_t *old_state = buf->state; + if (old_state != NULL) + { + int old_type = buf->rand_type; + set_int32 (&old_state[-1], + (old_type == TYPE_0 + ? TYPE_0 + : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); + } + + int type; + if (n >= BREAK_3) + type = n < BREAK_4 ? TYPE_3 : TYPE_4; + else if (n < BREAK_1) + { + if (n < BREAK_0) + goto fail; + + type = TYPE_0; + } + else + type = n < BREAK_2 ? TYPE_1 : TYPE_2; + + int degree = random_poly_info.degrees[type]; + int separation = random_poly_info.seps[type]; + + buf->rand_type = type; + buf->rand_sep = separation; + buf->rand_deg = degree; + int32_t *state = &((int32_t *) arg_state)[1]; /* First location. */ + /* Must set END_PTR before srandom. */ + buf->end_ptr = &state[degree]; + + buf->state = state; + + __srandom_r (seed, buf); + + set_int32 (&state[-1], + type == TYPE_0 ? TYPE_0 : (buf->rptr - state) * MAX_TYPES + type); + + return 0; + + fail: + __set_errno (EINVAL); + return -1; +} + +weak_alias (__initstate_r, initstate_r) + +/* Restore the state from the given state array. + Note: It is important that we also remember the locations of the pointers + in the current state information, and restore the locations of the pointers + from the old state information. This is done by multiplexing the pointer + location into the zeroth word of the state information. Note that due + to the order in which things are done, it is OK to call setstate with the + same state as the current state + Returns 0 on success, non-zero on failure. */ +int +__setstate_r (char *arg_state, struct random_data *buf) +{ + int32_t *new_state = 1 + (int32_t *) arg_state; + int type; + int old_type; + int32_t *old_state; + int degree; + int separation; + + if (arg_state == NULL || buf == NULL) + goto fail; + + old_type = buf->rand_type; + old_state = buf->state; + set_int32 (&old_state[-1], + (old_type == TYPE_0 + ? TYPE_0 + : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); + + type = get_int32 (&new_state[-1]) % MAX_TYPES; + if (type < TYPE_0 || type > TYPE_4) + goto fail; + + buf->rand_deg = degree = random_poly_info.degrees[type]; + buf->rand_sep = separation = random_poly_info.seps[type]; + buf->rand_type = type; + + if (type != TYPE_0) + { + int rear = get_int32 (&new_state[-1]) / MAX_TYPES; + buf->rptr = &new_state[rear]; + buf->fptr = &new_state[(rear + separation) % degree]; + } + buf->state = new_state; + /* Set end_ptr too. */ + buf->end_ptr = &new_state[degree]; + + return 0; + + fail: + __set_errno (EINVAL); + return -1; +} + +weak_alias (__setstate_r, setstate_r) + +/* If we are using the trivial TYPE_0 R.N.G., just do the old linear + congruential bit. Otherwise, we do our fancy trinomial stuff, which is the + same in all the other cases due to all the global variables that have been + set up. The basic operation is to add the number at the rear pointer into + the one at the front pointer. Then both pointers are advanced to the next + location cyclically in the table. The value returned is the sum generated, + reduced to 31 bits by throwing away the "least random" low bit. + Note: The code takes advantage of the fact that both the front and + rear pointers can't wrap on the same call by not testing the rear + pointer if the front one has wrapped. Returns a 31-bit random number. */ + +int +__random_r (struct random_data *buf, int32_t *result) +{ + int32_t *state; + + if (buf == NULL || result == NULL) + goto fail; + + state = buf->state; + + if (buf->rand_type == TYPE_0) + { + int32_t val = (((get_int32 (&state[0]) * 1103515245U) + 12345U) + & 0x7fffffff); + set_int32 (&state[0], val); + *result = val; + } + else + { + int32_t *fptr = buf->fptr; + int32_t *rptr = buf->rptr; + int32_t *end_ptr = buf->end_ptr; + /* F and R are unsigned int, not uint32_t, to avoid undefined + overflow behavior on platforms where INT_MAX == UINT32_MAX. */ + unsigned int f = get_int32 (fptr); + unsigned int r = get_int32 (rptr); + uint32_t val = f + r; + set_int32 (fptr, val); + /* Chucking least random bit. */ + *result = val >> 1; + ++fptr; + if (fptr >= end_ptr) + { + fptr = state; + ++rptr; + } + else + { + ++rptr; + if (rptr >= end_ptr) + rptr = state; + } + buf->fptr = fptr; + buf->rptr = rptr; + } + return 0; + + fail: + __set_errno (EINVAL); + return -1; +} + +weak_alias (__random_r, random_r) diff --git a/tests/randomd.c b/tests/randomd.c index 87e8faef..df2edbf3 100644 --- a/tests/randomd.c +++ b/tests/randomd.c @@ -1,5 +1,5 @@ /* Some random 'double' numbers used by gnulib tests. - Copyright (C) 2012-2022 Free Software Foundation, Inc. + Copyright (C) 2012-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/randoml.c b/tests/randoml.c index 8feab2a9..7a52f8a2 100644 --- a/tests/randoml.c +++ b/tests/randoml.c @@ -1,5 +1,5 @@ /* Some random 'long double' numbers used by gnulib tests. - Copyright (C) 2012-2022 Free Software Foundation, Inc. + Copyright (C) 2012-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/realloc.c b/tests/realloc.c index c8783815..05731396 100644 --- a/tests/realloc.c +++ b/tests/realloc.c @@ -1,6 +1,6 @@ /* realloc() function that is glibc compatible. - Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2022 Free Software + Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify diff --git a/tests/reallocarray.c b/tests/reallocarray.c index 70c1b478..09711a0e 100644 --- a/tests/reallocarray.c +++ b/tests/reallocarray.c @@ -1,6 +1,6 @@ /* reallocarray function that is glibc compatible. - Copyright (C) 2017-2022 Free Software Foundation, Inc. + Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/same-inode.c b/tests/same-inode.c new file mode 100644 index 00000000..08c66a25 --- /dev/null +++ b/tests/same-inode.c @@ -0,0 +1,3 @@ +#include <config.h> +#define SAME_INODE_INLINE _GL_EXTERN_INLINE +#include "same-inode.h" diff --git a/tests/same-inode.h b/tests/same-inode.h index f65f3d03..62dd088e 100644 --- a/tests/same-inode.h +++ b/tests/same-inode.h @@ -1,6 +1,6 @@ /* Determine whether two stat buffers are known to refer to the same file. - Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -16,32 +16,70 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef SAME_INODE_H -# define SAME_INODE_H 1 - -# include <sys/types.h> - -# if defined __VMS && __CRTL_VER < 80200000 -# define SAME_INODE(a, b) \ - ((a).st_ino[0] == (b).st_ino[0] \ - && (a).st_ino[1] == (b).st_ino[1] \ - && (a).st_ino[2] == (b).st_ino[2] \ - && (a).st_dev == (b).st_dev) -# elif defined _WIN32 && ! defined __CYGWIN__ - /* Native Windows. */ -# if _GL_WINDOWS_STAT_INODES - /* stat() and fstat() set st_dev and st_ino to 0 if information about - the inode is not available. */ -# define SAME_INODE(a, b) \ - (!((a).st_ino == 0 && (a).st_dev == 0) \ - && (a).st_ino == (b).st_ino && (a).st_dev == (b).st_dev) +#define SAME_INODE_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include <sys/stat.h> + +_GL_INLINE_HEADER_BEGIN +#ifndef SAME_INODE_INLINE +# define SAME_INODE_INLINE _GL_INLINE +#endif + +/* True if A and B point to structs with st_dev and st_ino members + that are known to represent the same file. + + Use | and ^ to shorten generated code, and to lessen the + probability of screwups if st_ino is an array. */ + +#if defined __VMS && __CRTL_VER < 80200000 +# define PSAME_INODE(a, b) (! (((a)->st_dev ^ (b)->st_dev) \ + | ((a)->st_ino[0] ^ (b)->st_ino[0]) \ + | ((a)->st_ino[1] ^ (b)->st_ino[1]) \ + | ((a)->st_ino[2] ^ (b)->st_ino[2]))) +#elif defined _WIN32 && ! defined __CYGWIN__ + /* Native Windows. */ +# if _GL_WINDOWS_STAT_INODES + /* stat() and fstat() set st_dev and st_ino to 0 if information about + the inode is not available. */ +# if _GL_WINDOWS_STAT_INODES == 2 +# define PSAME_INODE(a, b) \ + (! (! ((a)->st_dev | (a)->st_ino._gl_ino[0] | (a)->st_ino._gl_ino[1]) \ + | ((a)->st_dev ^ (b)->st_dev) \ + | ((a)->st_ino._gl_ino[0] ^ (b)->st_ino._gl_ino[0]) \ + | ((a)->st_ino._gl_ino[1] ^ (b)->st_ino._gl_ino[1]))) # else - /* stat() and fstat() set st_ino to 0 always. */ -# define SAME_INODE(a, b) 0 +# define PSAME_INODE(a, b) (! (! ((a)->st_dev | (a)->st_ino) \ + | ((a)->st_dev ^ (b)->st_dev) \ + | ((a)->st_ino ^ (b)->st_ino))) # endif # else -# define SAME_INODE(a, b) \ - ((a).st_ino == (b).st_ino \ - && (a).st_dev == (b).st_dev) + /* stat() and fstat() set st_ino to 0 always. */ +# define PSAME_INODE(a, b) 0 # endif +#else + /* POSIX. */ +# define PSAME_INODE(a, b) (! (((a)->st_dev ^ (b)->st_dev) \ + | ((a)->st_ino ^ (b)->st_ino))) +#endif + +/* True if struct objects A and B are known to represent the same file. */ + +#define SAME_INODE(a, b) PSAME_INODE (&(a), &(b)) + +/* True if *A and *B represent the same file. Unlike PSAME_INODE, + args are evaluated once and must point to struct stat. */ + +SAME_INODE_INLINE bool +psame_inode (struct stat const *a, struct stat const *b) +{ + return PSAME_INODE (a, b); +} + +_GL_INLINE_HEADER_END #endif diff --git a/tests/sched.in.h b/tests/sched.in.h index d19c5022..838fb12b 100644 --- a/tests/sched.in.h +++ b/tests/sched.in.h @@ -1,5 +1,5 @@ /* A GNU-like <sched.h>. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -21,6 +21,13 @@ #endif @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. + For the 'year2038' module to work right, <config.h> needs to have been + included before. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SCHED_H@ # if @HAVE_SYS_CDEFS_H@ @@ -32,6 +39,11 @@ #ifndef _@GUARD_PREFIX@_SCHED_H #define _@GUARD_PREFIX@_SCHED_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* Get pid_t. This is needed on glibc 2.11 (see glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=13198>) diff --git a/tests/sched_yield.c b/tests/sched_yield.c index 255de34e..72928b72 100644 --- a/tests/sched_yield.c +++ b/tests/sched_yield.c @@ -1,5 +1,5 @@ /* Schedule other threads to run. - Copyright (C) 2019-2022 Free Software Foundation, Inc. + Copyright (C) 2019-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/select.c b/tests/select.c index c2424982..5f7a5d00 100644 --- a/tests/select.c +++ b/tests/select.c @@ -1,7 +1,7 @@ /* Emulation for select(2) Contributed by Paolo Bonzini. - Copyright 2008-2022 Free Software Foundation, Inc. + Copyright 2008-2024 Free Software Foundation, Inc. This file is part of gnulib. @@ -279,8 +279,11 @@ rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, int i, fd, rc; clock_t tend; - if (nfds > FD_SETSIZE) - nfds = FD_SETSIZE; + if (nfds < 0 || nfds > FD_SETSIZE) + { + errno = EINVAL; + return -1; + } if (!timeout) wait_timeout = INFINITE; diff --git a/tests/setenv.c b/tests/setenv.c index ebfd4e55..9e2e9e2f 100644 --- a/tests/setenv.c +++ b/tests/setenv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995-2003, 2005-2022 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995-2003, 2005-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify @@ -82,6 +82,7 @@ typedef int (*compar_fn_t) (const void *, const void *); static void *known_values; # define KNOWN_VALUE(Str) \ + __extension__ \ ({ \ void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ value != NULL ? *(char **) value : NULL; \ @@ -375,6 +376,11 @@ rpl_setenv (const char *name, const char *value, int replace) int saved_errno; size_t len = strlen (value); tmp = malloca (len + 2); + if (tmp == NULL) + { + errno = ENOMEM; + return -1; + } /* Since leading '=' is eaten, double it up. */ *tmp = '='; memcpy (tmp + 1, value, len + 1); diff --git a/tests/setlocale.c b/tests/setlocale.c index b9a29ee6..eb263617 100644 --- a/tests/setlocale.c +++ b/tests/setlocale.c @@ -1,5 +1,5 @@ /* Set the current locale. -*- coding: utf-8 -*- - Copyright (C) 2009, 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2009, 2011-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -1574,7 +1574,7 @@ setlocale_improved (int category, const char *locale) For LC_COLLATE, the application should use the locale properties kCFLocaleCollationIdentifier, kCFLocaleCollatorIdentifier. - For LC_MONETARY, the applicationshould use the locale + For LC_MONETARY, the application should use the locale properties kCFLocaleCurrencySymbol, kCFLocaleCurrencyCode. But since most applications don't have macOS specific diff --git a/tests/setsockopt.c b/tests/setsockopt.c index 2811c19a..42cc3dcc 100644 --- a/tests/setsockopt.c +++ b/tests/setsockopt.c @@ -1,6 +1,6 @@ /* setsockopt.c --- wrappers for Windows setsockopt function - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/signal.in.h b/tests/signal.in.h index c0d4848d..107226e3 100644 --- a/tests/signal.in.h +++ b/tests/signal.in.h @@ -1,6 +1,6 @@ /* A GNU-like <signal.h>. - Copyright (C) 2006-2022 Free Software Foundation, Inc. + Copyright (C) 2006-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -55,6 +55,11 @@ #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _@GUARD_PREFIX@_SIGNAL_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* For testing the OpenBSD version. */ #if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \ && defined __OpenBSD__ diff --git a/tests/signature.h b/tests/signature.h index 7a8ef91a..d2a24622 100644 --- a/tests/signature.h +++ b/tests/signature.h @@ -1,5 +1,5 @@ /* Macro for checking that a function declaration is compliant. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/signed-nan.h b/tests/signed-nan.h new file mode 100644 index 00000000..18a550a7 --- /dev/null +++ b/tests/signed-nan.h @@ -0,0 +1,88 @@ +/* Macros for quiet not-a-number. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _SIGNED_NAN_H +#define _SIGNED_NAN_H + +#include <math.h> + +#include "nan.h" + + +/* Returns a quiet 'float' NaN with sign bit == 0. */ +_GL_UNUSED static float +positive_NaNf () +{ + /* 'volatile' works around a GCC bug: + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ + float volatile nan = NaNf (); + return (signbit (nan) ? - nan : nan); +} + +/* Returns a quiet 'float' NaN with sign bit == 1. */ +_GL_UNUSED static float +negative_NaNf () +{ + /* 'volatile' works around a GCC bug: + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ + float volatile nan = NaNf (); + return (signbit (nan) ? nan : - nan); +} + + +/* Returns a quiet 'double' NaN with sign bit == 0. */ +_GL_UNUSED static double +positive_NaNd () +{ + /* 'volatile' works around a GCC bug: + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ + double volatile nan = NaNd (); + return (signbit (nan) ? - nan : nan); +} + +/* Returns a quiet 'double' NaN with sign bit == 1. */ +_GL_UNUSED static double +negative_NaNd () +{ + /* 'volatile' works around a GCC bug: + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ + double volatile nan = NaNd (); + return (signbit (nan) ? nan : - nan); +} + + +/* Returns a quiet 'long double' NaN with sign bit == 0. */ +_GL_UNUSED static long double +positive_NaNl () +{ + /* 'volatile' works around a GCC bug: + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ + long double volatile nan = NaNl (); + return (signbit (nan) ? - nan : nan); +} + +/* Returns a quiet 'long double' NaN with sign bit == 1. */ +_GL_UNUSED static long double +negative_NaNl () +{ + /* 'volatile' works around a GCC bug: + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ + long double volatile nan = NaNl (); + return (signbit (nan) ? nan : - nan); +} + + +#endif /* _SIGNED_NAN_H */ diff --git a/tests/signed-snan.h b/tests/signed-snan.h new file mode 100644 index 00000000..7e6483a7 --- /dev/null +++ b/tests/signed-snan.h @@ -0,0 +1,142 @@ +/* Macros for signalling not-a-number. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _SIGNED_SNAN_H +#define _SIGNED_SNAN_H + +#include "signed-nan.h" +#include "snan.h" + + +#if HAVE_SNANF + +/* Returns a signalling 'float' NaN with sign bit == 0 in memory. */ +_GL_UNUSED static memory_float +memory_positive_SNaNf () +{ + return construct_memory_SNaNf (positive_NaNf ()); +} + +/* Returns a signalling 'float' NaN with sign bit == 1 in memory. */ +_GL_UNUSED static memory_float +memory_negative_SNaNf () +{ + return construct_memory_SNaNf (negative_NaNf ()); +} + +/* Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", the following functions may return a quiet NaN + instead. Use the functions with 'memory_' prefix if you need to avoid this. + See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> + for details. */ + +/* Returns a signalling 'float' NaN with sign bit == 0. */ +_GL_UNUSED static float +positive_SNaNf () +{ + return memory_positive_SNaNf ().value; +} + +/* Returns a signalling 'float' NaN with sign bit == 1. */ +_GL_UNUSED static float +negative_SNaNf () +{ + return memory_negative_SNaNf ().value; +} + +#endif + + +#if HAVE_SNAND + +/* Returns a signalling 'double' NaN with sign bit == 0 in memory. */ +_GL_UNUSED static memory_double +memory_positive_SNaNd () +{ + return construct_memory_SNaNd (positive_NaNd ()); +} + +/* Returns a signalling 'double' NaN with sign bit == 1 in memory. */ +_GL_UNUSED static memory_double +memory_negative_SNaNd () +{ + return construct_memory_SNaNd (negative_NaNd ()); +} + +/* Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", the following functions may return a quiet NaN + instead. Use the functions with 'memory_' prefix if you need to avoid this. + See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> + for details. */ + +/* Returns a signalling 'double' NaN with sign bit == 0. */ +_GL_UNUSED static double +positive_SNaNd () +{ + return memory_positive_SNaNd ().value; +} + +/* Returns a signalling 'double' NaN with sign bit == 1. */ +_GL_UNUSED static double +negative_SNaNd () +{ + return memory_negative_SNaNd ().value; +} + +#endif + + +#if HAVE_SNANL + +/* Returns a signalling 'long double' NaN with sign bit == 0 in memory. */ +_GL_UNUSED static memory_long_double +memory_positive_SNaNl () +{ + return construct_memory_SNaNl (positive_NaNl ()); +} + +/* Returns a signalling 'long double' NaN with sign bit == 1 in memory. */ +_GL_UNUSED static memory_long_double +memory_negative_SNaNl () +{ + return construct_memory_SNaNl (negative_NaNl ()); +} + +/* Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE is 1, the + following functions may return a quiet NaN instead. Use the functions + with 'memory_' prefix if you need to avoid this. See + <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> + for details. */ + +/* Returns a signalling 'long double' NaN with sign bit == 0. */ +_GL_UNUSED static long double +positive_SNaNl () +{ + return memory_positive_SNaNl ().value; +} + +/* Returns a signalling 'long double' NaN with sign bit == 1. */ +_GL_UNUSED static long double +negative_SNaNl () +{ + return memory_negative_SNaNl ().value; +} + +#endif + + +#endif /* _SIGNED_SNAN_H */ diff --git a/tests/sigprocmask.c b/tests/sigprocmask.c index a805da66..3df69b51 100644 --- a/tests/sigprocmask.c +++ b/tests/sigprocmask.c @@ -1,5 +1,5 @@ /* POSIX compatible signal blocking. - Copyright (C) 2006-2022 Free Software Foundation, Inc. + Copyright (C) 2006-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This file is free software: you can redistribute it and/or modify diff --git a/tests/sleep.c b/tests/sleep.c index 80431c10..1cab9aa6 100644 --- a/tests/sleep.c +++ b/tests/sleep.c @@ -1,5 +1,5 @@ /* Pausing execution of the current thread. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software: you can redistribute it and/or modify diff --git a/tests/snan.h b/tests/snan.h new file mode 100644 index 00000000..95235040 --- /dev/null +++ b/tests/snan.h @@ -0,0 +1,276 @@ +/* Macros for signalling not-a-number. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _SNAN_H +#define _SNAN_H + +#include <float.h> +#include <limits.h> +#include <math.h> + +#include "nan.h" + + +/* The bit that distinguishes a quiet NaN from a signalling NaN is, according to + <https://en.wikipedia.org/wiki/NaN#Encoding>, the most significant bit of the + mantissa field. + According to <https://en.wikipedia.org/wiki/IEEE_754#Formats>, this is the + next bit, right below the bit 0 of the exponent. + This bit is + * == 0 to indicate a quiet NaN or Infinity, + == 1 to indicate a signalling NaN, + on these CPUs: hppa, mips (*), sh4. + * == 1 to indicate a quiet NaN, + == 0 to indicate a signalling NaN or Infinity, + on all other CPUs. + On these platforms, additionally a signalling NaN must have some other + mantissa bit == 1, because when all exponent bits are == 1 and all + mantissa bits are == 0, the number denotes ±Infinity. + This NaN encoding is specified by IEEE 754-2008 § 6.2.1. + + (*) On mips CPUs, it depends on the CPU model. The classical behaviour is + as indicated above. On some newer models, it's like on the other CPUs. + On some (but not all!) models this meta-info can be determined from two + special CPU registers: If the "Floating Point Implementation Register" (fir) + bit 23, also known as Has2008 bit, is set, the "Floating Point Control and + Status Register" (fcsr) bit 18, also known as the NAN2008 bit, has the value + - 0 for the classical behaviour, + - 1 for like on the other CPUs. + Both of these bits are read-only. + This module has determined the behaviour at configure time and defines the + C macros MIPS_NAN2008_FLOAT, MIPS_NAN2008_DOUBLE, MIPS_NAN2008_LONG_DOUBLE + accordingly. */ + + +/* 'float' = IEEE 754 single-precision + <https://en.wikipedia.org/wiki/Single-precision_floating-point_format> */ + +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; + +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + +# define HAVE_SNANF 1 + +_GL_UNUSED static memory_float +construct_memory_SNaNf (float quiet_value) +{ + memory_float m; + m.value = quiet_value; + /* Turn the quiet NaN into a signalling NaN. */ + #if FLT_EXPBIT0_BIT > 0 + m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); + #else + m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + #endif + /* Set some arbitrary mantissa bit. */ + if (FLT_EXPBIT0_WORD < NWORDS / 2) /* NWORDS > 1 and big endian */ + m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; + else /* NWORDS == 1 or little endian */ + m.word[0] |= (unsigned int) 1; + return m; +} + +/* Returns a signalling 'float' NaN in memory. */ +_GL_UNUSED static memory_float +memory_SNaNf () +{ + return construct_memory_SNaNf (NaNf ()); +} + +_GL_UNUSED static float +construct_SNaNf (float quiet_value) +{ + return construct_memory_SNaNf (quiet_value).value; +} + +/* Returns a signalling 'float' NaN. + Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", this function may return a quiet NaN instead. + Use memory_SNaNf() if you need to avoid this. See + <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> + for details. */ +_GL_UNUSED static float +SNaNf () +{ + return memory_SNaNf ().value; +} + +#endif + +#undef NWORDS + + +/* 'double' = IEEE 754 double-precision + <https://en.wikipedia.org/wiki/Double-precision_floating-point_format> */ + +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; + +#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + +# define HAVE_SNAND 1 + +_GL_UNUSED static memory_double +construct_memory_SNaNd (double quiet_value) +{ + memory_double m; + m.value = quiet_value; + /* Turn the quiet NaN into a signalling NaN. */ + #if DBL_EXPBIT0_BIT > 0 + m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); + #else + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + #endif + /* Set some arbitrary mantissa bit. */ + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << DBL_EXPBIT0_BIT; + return m; +} + +/* Returns a signalling 'double' NaN in memory. */ +_GL_UNUSED static memory_double +memory_SNaNd () +{ + return construct_memory_SNaNd (NaNd ()); +} + +_GL_UNUSED static double +construct_SNaNd (double quiet_value) +{ + return construct_memory_SNaNd (quiet_value).value; +} + +/* Returns a signalling 'double' NaN. + Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", this function may return a quiet NaN instead. + Use memory_SNaNf() if you need to avoid this. See + <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> + for details. */ +_GL_UNUSED static double +SNaNd () +{ + return memory_SNaNd ().value; +} + +#endif + +#undef NWORDS + + +/* 'long double' = + * if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE: + IEEE 754 double-precision + <https://en.wikipedia.org/wiki/Double-precision_floating-point_format> + * Otherwise: + - On i386, x86_64, ia64: + 80-bits extended-precision + <https://en.wikipedia.org/wiki/Extended_precision#x86_extended_precision_format> + - On alpha, arm64, loongarch64, mips64, riscv64, s390x, sparc64: + IEEE 754 quadruple-precision + <https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#IEEE_754_quadruple-precision_binary_floating-point_format:_binary128> + - On powerpc, powerpc64, powerpc64le: + 2x64-bits double-double + <https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#Double-double_arithmetic> + - On m68k: + 80-bits extended-precision, padded to 96 bits, with non-IEEE exponent + */ + +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; + +#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT + +# define HAVE_SNANL 1 + +_GL_UNUSED static memory_long_double +construct_memory_SNaNl (long double quiet_value) +{ + memory_long_double m; + m.value = quiet_value; + #if defined __powerpc__ && LDBL_MANT_DIG == 106 + /* This is PowerPC "double double", a pair of two doubles. Inf and NaN are + represented as the corresponding 64-bit IEEE values in the first double; + the second is ignored. Manipulate only the first double. */ + #define HNWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + #else + #define HNWORDS NWORDS + #endif + /* Turn the quiet NaN into a signalling NaN. */ + #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE + /* In this representation, the leading 1 of the mantissa is explicitly + stored. */ + #if LDBL_EXPBIT0_BIT > 1 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 2); + #else + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 2); + #endif + #else + /* In this representation, the leading 1 of the mantissa is implicit. */ + #if LDBL_EXPBIT0_BIT > 0 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); + #else + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + #endif + #endif + /* Set some arbitrary mantissa bit. */ + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; + #undef HNWORDS + return m; +} + +/* Returns a signalling 'long double' NaN in memory. */ +_GL_UNUSED static memory_long_double +memory_SNaNl () +{ + return construct_memory_SNaNl (NaNl ()); +} + +_GL_UNUSED static long double +construct_SNaNl (long double quiet_value) +{ + return construct_memory_SNaNl (quiet_value).value; +} + +/* Returns a signalling 'long double' NaN. + Note: On 32-bit x86 processors, as well as on x86_64 processors with + CC="gcc -mfpmath=387", if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE is 1, this + function may return a quiet NaN instead. Use memory_SNaNf() if you + need to avoid this. See + <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> + for details. */ +_GL_UNUSED static long double +SNaNl () +{ + return memory_SNaNl ().value; +} + +#endif + +#undef NWORDS + + +#endif /* _SNAN_H */ diff --git a/tests/socket.c b/tests/socket.c index 49e013c7..6061a3fb 100644 --- a/tests/socket.c +++ b/tests/socket.c @@ -1,6 +1,6 @@ /* socket.c --- wrappers for Windows socket function - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/sockets.c b/tests/sockets.c index 31b43029..92beb7d3 100644 --- a/tests/sockets.c +++ b/tests/sockets.c @@ -1,6 +1,6 @@ /* sockets.c --- wrappers for Windows socket functions - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/sockets.h b/tests/sockets.h index 75e49fce..99d6efca 100644 --- a/tests/sockets.h +++ b/tests/sockets.h @@ -1,6 +1,6 @@ /* sockets.h - wrappers for Windows socket functions - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -20,6 +20,11 @@ #ifndef SOCKETS_H #define SOCKETS_H 1 +/* This file uses _GL_ATTRIBUTE_CONST. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #define SOCKETS_1_0 0x0001 #define SOCKETS_1_1 0x0101 #define SOCKETS_2_0 0x0002 diff --git a/tests/stat-time.c b/tests/stat-time.c index 3d48a2b5..1ab01f53 100644 --- a/tests/stat-time.c +++ b/tests/stat-time.c @@ -1,6 +1,6 @@ /* stat-related time functions. - Copyright (C) 2012-2022 Free Software Foundation, Inc. + Copyright (C) 2012-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/stat-time.h b/tests/stat-time.h index b661196e..3cd8478f 100644 --- a/tests/stat-time.h +++ b/tests/stat-time.h @@ -1,6 +1,6 @@ /* stat-related time functions. - Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -20,15 +20,18 @@ #ifndef STAT_TIME_H #define STAT_TIME_H 1 +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED, + _GL_ATTRIBUTE_PURE, HAVE_STRUCT_STAT_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #include <errno.h> #include <stdckdint.h> #include <stddef.h> #include <sys/stat.h> #include <time.h> -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_STAT_TIME_INLINE # define _GL_STAT_TIME_INLINE _GL_INLINE @@ -49,11 +52,13 @@ extern "C" { #if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC # if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) +# define STAT_TIMESPEC_OFFSETOF(st_xtim) offsetof (struct stat, st_xtim) # else # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) # endif #elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) +# define STAT_TIMESPEC_OFFSETOF(st_xtim) offsetof (struct stat, st_xtim##espec) #elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) #elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC @@ -119,10 +124,8 @@ get_stat_atime (struct stat const *st) #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim); #else - struct timespec t; - t.tv_sec = st->st_atime; - t.tv_nsec = get_stat_atime_ns (st); - return t; + return (struct timespec) { .tv_sec = st->st_atime, + .tv_nsec = get_stat_atime_ns (st) }; #endif } @@ -133,10 +136,8 @@ get_stat_ctime (struct stat const *st) #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim); #else - struct timespec t; - t.tv_sec = st->st_ctime; - t.tv_nsec = get_stat_ctime_ns (st); - return t; + return (struct timespec) { .tv_sec = st->st_ctime, + .tv_nsec = get_stat_ctime_ns (st) }; #endif } @@ -147,10 +148,8 @@ get_stat_mtime (struct stat const *st) #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim); #else - struct timespec t; - t.tv_sec = st->st_mtime; - t.tv_nsec = get_stat_mtime_ns (st); - return t; + return (struct timespec) { .tv_sec = st->st_mtime, + .tv_nsec = get_stat_mtime_ns (st) }; #endif } @@ -165,8 +164,8 @@ get_stat_birthtime (_GL_UNUSED struct stat const *st) || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) t = STAT_TIMESPEC (st, st_birthtim); #elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC - t.tv_sec = st->st_birthtime; - t.tv_nsec = st->st_birthtimensec; + t = (struct timespec) { .tv_sec = st->st_birthtime, + .tv_nsec = st->st_birthtimensec }; #elif defined _WIN32 && ! defined __CYGWIN__ /* Native Windows platforms (but not Cygwin) put the "file creation time" in st_ctime (!). See @@ -174,13 +173,11 @@ get_stat_birthtime (_GL_UNUSED struct stat const *st) # if _GL_WINDOWS_STAT_TIMESPEC t = st->st_ctim; # else - t.tv_sec = st->st_ctime; - t.tv_nsec = 0; + t = (struct timespec) { .tv_sec = st->st_ctime }; # endif #else /* Birth time is not supported. */ - t.tv_sec = -1; - t.tv_nsec = -1; + t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 }; #endif #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ @@ -192,30 +189,28 @@ get_stat_birthtime (_GL_UNUSED struct stat const *st) sometimes returns junk in the birth time fields; work around this bug if it is detected. */ if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) - { - t.tv_sec = -1; - t.tv_nsec = -1; - } + t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 }; #endif return t; } /* If a stat-like function returned RESULT, normalize the timestamps - in *ST, in case this platform suffers from the Solaris 11 bug where + in *ST, if this platform suffers from a macOS and Solaris bug where tv_nsec might be negative. Return the adjusted RESULT, setting errno to EOVERFLOW if normalization overflowed. This function is intended to be private to this .h file. */ _GL_STAT_TIME_INLINE int stat_time_normalize (int result, _GL_UNUSED struct stat *st) { -#if defined __sun && defined STAT_TIMESPEC +#if (((defined __APPLE__ && defined __MACH__) || defined __sun) \ + && defined STAT_TIMESPEC_OFFSETOF) if (result == 0) { long int timespec_hz = 1000000000; - short int const ts_off[] = { offsetof (struct stat, st_atim), - offsetof (struct stat, st_mtim), - offsetof (struct stat, st_ctim) }; + short int const ts_off[] = { STAT_TIMESPEC_OFFSETOF (st_atim), + STAT_TIMESPEC_OFFSETOF (st_mtim), + STAT_TIMESPEC_OFFSETOF (st_ctim) }; int i; for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) { @@ -229,8 +224,7 @@ stat_time_normalize (int result, _GL_UNUSED struct stat *st) } ts->tv_nsec = r; /* Overflow is possible, as Solaris 11 stat can yield - tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. - INT_ADD_WRAPV is OK, since time_t is signed on Solaris. */ + tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. */ if (ckd_add (&ts->tv_sec, q, ts->tv_sec)) { errno = EOVERFLOW; diff --git a/tests/stat-w32.c b/tests/stat-w32.c index e61b75c6..ddd6f598 100644 --- a/tests/stat-w32.c +++ b/tests/stat-w32.c @@ -1,5 +1,5 @@ /* Core of implementation of fstat and stat for native Windows. - Copyright (C) 2017-2022 Free Software Foundation, Inc. + Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/stat-w32.h b/tests/stat-w32.h index 0f79d614..392faed1 100644 --- a/tests/stat-w32.h +++ b/tests/stat-w32.h @@ -1,5 +1,5 @@ /* Core of implementation of fstat and stat for native Windows. - Copyright (C) 2017-2022 Free Software Foundation, Inc. + Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/stat.c b/tests/stat.c index adb61233..ecf9f9bb 100644 --- a/tests/stat.c +++ b/tests/stat.c @@ -1,5 +1,5 @@ /* Work around platform bugs in stat. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/stdalign.in.h b/tests/stdalign.in.h deleted file mode 100644 index 58fd245c..00000000 --- a/tests/stdalign.in.h +++ /dev/null @@ -1,133 +0,0 @@ -/* A substitute for ISO C11 <stdalign.h>. - - Copyright 2011-2022 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see <https://www.gnu.org/licenses/>. */ - -/* Written by Paul Eggert and Bruno Haible. */ - -#ifndef _GL_STDALIGN_H -#define _GL_STDALIGN_H - -/* ISO C11 <stdalign.h> for platforms that lack it. - - References: - ISO C11 (latest free draft - <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>) - sections 6.5.3.4, 6.7.5, 7.15. - C++11 (latest free draft - <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>) - section 18.10. */ - -/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment - requirement of a structure member (i.e., slot or field) that is of - type TYPE, as an integer constant expression. - - This differs from GCC's and clang's __alignof__ operator, which can - yield a better-performing alignment for an object of that type. For - example, on x86 with GCC and on Linux/x86 with clang, - __alignof__ (double) and __alignof__ (long long) are 8, whereas - alignof (double) and alignof (long long) are 4 unless the option - '-malign-double' is used. - - The result cannot be used as a value for an 'enum' constant, if you - want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */ - -/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other - standard headers, defines conflicting implementations of _Alignas - and _Alignof that are no better than ours; override them. */ -#undef _Alignas -#undef _Alignof - -/* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 - <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. - clang versions < 8.0.0 have the same bug. */ -#if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ - || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \ - && !defined __clang__) \ - || (defined __clang__ && __clang_major__ < 8)) -# ifdef __cplusplus -# if (201103 <= __cplusplus || defined _MSC_VER) -# define _Alignof(type) alignof (type) -# else - template <class __t> struct __alignof_helper { char __a; __t __b; }; -# define _Alignof(type) offsetof (__alignof_helper<type>, __b) -# define _GL_STDALIGN_NEEDS_STDDEF 1 -# endif -# else -# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) -# define _GL_STDALIGN_NEEDS_STDDEF 1 -# endif -#endif -#if ! (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER)) -# define alignof _Alignof -#endif -#define __alignof_is_defined 1 - -/* alignas (A), also known as _Alignas (A), aligns a variable or type - to the alignment A, where A is an integer constant expression. For - example: - - int alignas (8) foo; - struct s { int a; int alignas (8) bar; }; - - aligns the address of FOO and the offset of BAR to be multiples of 8. - - A should be a power of two that is at least the type's alignment - and at most the implementation's alignment limit. This limit is - 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable - to MSVC through at least version 10.0, A should be an integer - constant, as MSVC does not support expressions such as 1 << 3. - To be portable to Sun C 5.11, do not align auto variables to - anything stricter than their default alignment. - - The following C11 requirements are not supported here: - - - If A is zero, alignas has no effect. - - alignas can be used multiple times; the strictest one wins. - - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). - - */ - -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 -# if defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER) -# define _Alignas(a) alignas (a) -# elif (!defined __attribute__ \ - && ((defined __APPLE__ && defined __MACH__ \ - ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ - : __GNUC__ && !defined __ibmxl__) \ - || (4 <= __clang_major__) \ - || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ - || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)) -# define _Alignas(a) __attribute__ ((__aligned__ (a))) -# elif 1300 <= _MSC_VER -# define _Alignas(a) __declspec (align (a)) -# endif -#endif -#if ((defined _Alignas \ - && !(defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER))) \ - || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) -# define alignas _Alignas -#endif -#if (defined alignas \ - || (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER))) -# define __alignas_is_defined 1 -#endif - -/* Include <stddef.h> if needed for offsetof. */ -#if _GL_STDALIGN_NEEDS_STDDEF -# include <stddef.h> -#endif - -#endif /* _GL_STDALIGN_H */ diff --git a/tests/stdio-read.c b/tests/stdio-read.c index 85efa0d4..253b8aa4 100644 --- a/tests/stdio-read.c +++ b/tests/stdio-read.c @@ -1,5 +1,5 @@ /* POSIX compatible FILE stream read function. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify diff --git a/tests/stdio-write.c b/tests/stdio-write.c index 82facf54..ca6aa00c 100644 --- a/tests/stdio-write.c +++ b/tests/stdio-write.c @@ -1,5 +1,5 @@ /* POSIX compatible FILE stream write function. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify diff --git a/tests/stdio.in.h b/tests/stdio.in.h index 7b36dac2..4947307e 100644 --- a/tests/stdio.in.h +++ b/tests/stdio.in.h @@ -1,6 +1,6 @@ /* A GNU-like <stdio.h>. - Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2004, 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -36,6 +36,18 @@ #ifndef _@GUARD_PREFIX@_STDIO_H +/* Suppress macOS deprecation warnings for sprintf and vsprintf. */ +#if (defined __APPLE__ && defined __MACH__) && !defined _POSIX_C_SOURCE +# ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +# include <AvailabilityMacros.h> +# endif +# if (defined MAC_OS_X_VERSION_MIN_REQUIRED \ + && 130000 <= MAC_OS_X_VERSION_MIN_REQUIRED) +# define _POSIX_C_SOURCE 200809L +# define _GL_DEFINED__POSIX_C_SOURCE +# endif +#endif + #define _GL_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ @@ -43,9 +55,21 @@ #undef _GL_ALREADY_INCLUDING_STDIO_H +#ifdef _GL_DEFINED__POSIX_C_SOURCE +# undef _GL_DEFINED__POSIX_C_SOURCE +# undef _POSIX_C_SOURCE +#endif + #ifndef _@GUARD_PREFIX@_STDIO_H #define _@GUARD_PREFIX@_STDIO_H +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT, + _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* Get va_list. Needed on many systems, including glibc 2.8. */ #include <stdarg.h> @@ -116,6 +140,38 @@ # endif #endif +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly + allocated memory. */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +# if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 +# if __cplusplus >= 201103L +# define _GL_ATTRIBUTE_NOTHROW noexcept (true) +# else +# define _GL_ATTRIBUTE_NOTHROW throw () +# endif +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# else +# if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# endif +#endif + /* An __attribute__ __format__ specifier for a function that takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. @@ -193,6 +249,36 @@ # undef putc_unlocked #endif + +/* Maximum number of characters produced by printing a NaN value. */ +#ifndef _PRINTF_NAN_LEN_MAX +# if defined __FreeBSD__ || defined __DragonFly__ \ + || defined __NetBSD__ \ + || (defined __APPLE__ && defined __MACH__) +/* On BSD systems, a NaN value prints as just "nan", without a sign. */ +# define _PRINTF_NAN_LEN_MAX 3 +# elif (__GLIBC__ >= 2) || MUSL_LIBC || defined __OpenBSD__ || defined __sun || defined __CYGWIN__ +/* glibc, musl libc, OpenBSD, Solaris libc, and Cygwin produce "[-]nan". */ +# define _PRINTF_NAN_LEN_MAX 4 +# elif defined _AIX +/* AIX produces "[-]NaNQ". */ +# define _PRINTF_NAN_LEN_MAX 5 +# elif defined _WIN32 && !defined __CYGWIN__ +/* On native Windows, the output can be: + - with MSVC ucrt: "[-]nan" or "[-]nan(ind)" or "[-]nan(snan)", + - with mingw: "[-]1.#IND" or "[-]1.#QNAN". */ +# define _PRINTF_NAN_LEN_MAX 10 +# elif defined __sgi +/* On IRIX, the output typically is "[-]nan0xNNNNNNNN" with 8 hexadecimal + digits. */ +# define _PRINTF_NAN_LEN_MAX 14 +# else +/* We don't know, but 32 should be a safe maximum. */ +# define _PRINTF_NAN_LEN_MAX 32 +# endif +#endif + + #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) @@ -210,7 +296,9 @@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...) # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (dprintf); +# endif #elif defined GNULIB_POSIXCHECK # undef dprintf # if HAVE_RAW_DECL_DPRINTF @@ -273,7 +361,8 @@ _GL_CXXALIASWARN (fcloseall); # endif _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) - _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) @@ -284,9 +373,18 @@ _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) - _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); + _GL_ATTRIBUTE_NOTHROW + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); +# else +_GL_FUNCDECL_SYS (fdopen, FILE *, + (int fd, const char *mode) + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); +# endif # endif _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif @@ -294,9 +392,18 @@ _GL_CXXALIASWARN (fdopen); #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (fdopen, FILE *, + (int fd, const char *mode) + _GL_ATTRIBUTE_NOTHROW + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); +# else _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) - _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); +# endif # endif # if defined GNULIB_POSIXCHECK # undef fdopen @@ -407,7 +514,8 @@ _GL_CXXALIASWARN (fileno); # endif _GL_FUNCDECL_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode) - _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # else @@ -882,7 +990,9 @@ _GL_CXXALIAS_SYS (getdelim, ssize_t, int delimiter, FILE *restrict stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (getdelim); +# endif #elif defined GNULIB_POSIXCHECK # undef getdelim # if HAVE_RAW_DECL_GETDELIM @@ -921,7 +1031,7 @@ _GL_CXXALIAS_SYS (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream)); # endif -# if @HAVE_DECL_GETLINE@ +# if __GLIBC__ >= 2 && @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); # endif #elif defined GNULIB_POSIXCHECK @@ -951,9 +1061,17 @@ _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); # endif _GL_CXXALIAS_MDA (getw, int, (FILE *restrict stream)); # else +# if @HAVE_DECL_GETW@ +# if defined __APPLE__ && defined __MACH__ +/* The presence of the declaration depends on _POSIX_C_SOURCE. */ +_GL_FUNCDECL_SYS (getw, int, (FILE *restrict stream)); +# endif _GL_CXXALIAS_SYS (getw, int, (FILE *restrict stream)); +# endif # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (getw); +# endif #endif #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ @@ -1052,13 +1170,15 @@ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " # endif _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) - _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) + _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) - _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) + _GL_ATTRIBUTE_MALLOC); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif @@ -1068,7 +1188,8 @@ _GL_CXXALIASWARN (popen); /* For -Wmismatched-dealloc: Associate popen with pclose or rpl_pclose. */ _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) - _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) + _GL_ATTRIBUTE_MALLOC); # endif # if defined GNULIB_POSIXCHECK # undef popen @@ -1190,9 +1311,17 @@ _GL_CXXALIASWARN (puts); # endif _GL_CXXALIAS_MDA (putw, int, (int w, FILE *restrict stream)); # else +# if @HAVE_DECL_PUTW@ +# if defined __APPLE__ && defined __MACH__ +/* The presence of the declaration depends on _POSIX_C_SOURCE. */ +_GL_FUNCDECL_SYS (putw, int, (int w, FILE *restrict stream)); +# endif _GL_CXXALIAS_SYS (putw, int, (int w, FILE *restrict stream)); +# endif # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (putw); +# endif #endif #if @GNULIB_REMOVE@ @@ -1398,13 +1527,15 @@ _GL_CXXALIASWARN (tempnam); # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void) - _GL_ATTRIBUTE_DEALLOC (fclose, 1)); + _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) - _GL_ATTRIBUTE_DEALLOC (fclose, 1)); + _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); # endif _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif @@ -1415,7 +1546,8 @@ _GL_CXXALIASWARN (tmpfile); # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined tmpfile /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) - _GL_ATTRIBUTE_DEALLOC (fclose, 1)); + _GL_ATTRIBUTE_DEALLOC (fclose, 1) + _GL_ATTRIBUTE_MALLOC); # endif # if defined GNULIB_POSIXCHECK # undef tmpfile diff --git a/tests/strerror-override.c b/tests/strerror-override.c index 6be1afdc..b9c1c7ab 100644 --- a/tests/strerror-override.c +++ b/tests/strerror-override.c @@ -1,6 +1,6 @@ /* strerror-override.c --- POSIX compatible system error routine - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/strerror-override.h b/tests/strerror-override.h index d010d27c..872fa7d6 100644 --- a/tests/strerror-override.h +++ b/tests/strerror-override.h @@ -1,6 +1,6 @@ /* strerror-override.h --- POSIX compatible system error routine - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -18,6 +18,11 @@ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H +/* This file uses _GL_ATTRIBUTE_CONST. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + # include <errno.h> # include <stddef.h> diff --git a/tests/strerror.c b/tests/strerror.c index 1019fe9e..6b760ff4 100644 --- a/tests/strerror.c +++ b/tests/strerror.c @@ -1,6 +1,6 @@ /* strerror.c --- POSIX compatible system error routine - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/strerror_r.c b/tests/strerror_r.c index b154c292..0cd28ade 100644 --- a/tests/strerror_r.c +++ b/tests/strerror_r.c @@ -1,6 +1,6 @@ /* strerror_r.c --- POSIX compatible system error routine - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/symlink.c b/tests/symlink.c index 26310af7..6ba83666 100644 --- a/tests/symlink.c +++ b/tests/symlink.c @@ -1,5 +1,5 @@ /* Stub for symlink(). - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/sys_ioctl.in.h b/tests/sys_ioctl.in.h index 7f1cdc86..787d35f7 100644 --- a/tests/sys_ioctl.in.h +++ b/tests/sys_ioctl.in.h @@ -1,5 +1,5 @@ /* Substitute for and wrapper around <sys/ioctl.h>. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -29,6 +29,11 @@ #ifndef _@GUARD_PREFIX@_SYS_IOCTL_H #define _@GUARD_PREFIX@_SYS_IOCTL_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* AIX 5.1 and Solaris 10 declare ioctl() in <unistd.h> and in <stropts.h>, but not in <sys/ioctl.h>. Haiku declares ioctl() in <unistd.h>, but not in <sys/ioctl.h>. @@ -62,7 +67,9 @@ _GL_FUNCDECL_SYS (ioctl, int, _GL_CXXALIAS_SYS (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (ioctl); +# endif #elif @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ # undef ioctl # define ioctl ioctl_used_without_requesting_gnulib_module_ioctl diff --git a/tests/sys_select.in.h b/tests/sys_select.in.h index 860e957f..de29c779 100644 --- a/tests/sys_select.in.h +++ b/tests/sys_select.in.h @@ -1,5 +1,5 @@ /* Substitute for <sys/select.h>. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -19,6 +19,13 @@ # endif @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. + For the 'year2038' module to work right, <config.h> needs to have been + included before. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* On OSF/1 and Solaris 2.6, <sys/types.h> and <sys/time.h> both include <sys/select.h>. On Cygwin and OpenBSD, <sys/time.h> includes <sys/select.h>. @@ -71,6 +78,11 @@ #ifndef _@GUARD_PREFIX@_SYS_SELECT_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* On many platforms, <sys/select.h> assumes prior inclusion of <sys/types.h>. Also, mingw defines sigset_t there, instead of in <signal.h> where it belongs. */ diff --git a/tests/sys_socket.c b/tests/sys_socket.c index 0bfd60f2..672d3aac 100644 --- a/tests/sys_socket.c +++ b/tests/sys_socket.c @@ -1,6 +1,6 @@ /* Inline functions for <sys/socket.h>. - Copyright (C) 2012-2022 Free Software Foundation, Inc. + Copyright (C) 2012-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -18,5 +18,5 @@ #include <config.h> #define _GL_SYS_SOCKET_INLINE _GL_EXTERN_INLINE -#include "sys/socket.h" +#include <sys/socket.h> typedef int dummy; diff --git a/tests/sys_socket.in.h b/tests/sys_socket.in.h index 637a248d..13833c0f 100644 --- a/tests/sys_socket.in.h +++ b/tests/sys_socket.in.h @@ -1,6 +1,6 @@ /* Provide a sys/socket header file for systems lacking it (read: MinGW) and for systems where it is incomplete. - Copyright (C) 2005-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2024 Free Software Foundation, Inc. Written by Simon Josefsson. This file is free software: you can redistribute it and/or modify @@ -63,9 +63,12 @@ #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H #define _@GUARD_PREFIX@_SYS_SOCKET_H -#ifndef _GL_INLINE_HEADER_BEGIN +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*, alignof. */ +#if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif + _GL_INLINE_HEADER_BEGIN #ifndef _GL_SYS_SOCKET_INLINE # define _GL_SYS_SOCKET_INLINE _GL_INLINE @@ -355,7 +358,9 @@ _GL_CXXALIAS_SYS_CAST (accept, int, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (accept); +# endif #elif @HAVE_WINSOCK2_H@ # undef accept # define accept accept_used_without_requesting_gnulib_module_accept @@ -417,7 +422,9 @@ _GL_CXXALIAS_SYS_CAST (getpeername, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (getpeername); +# endif #elif @HAVE_WINSOCK2_H@ # undef getpeername # define getpeername getpeername_used_without_requesting_gnulib_module_getpeername @@ -449,7 +456,9 @@ _GL_CXXALIAS_SYS_CAST (getsockname, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (getsockname); +# endif #elif @HAVE_WINSOCK2_H@ # undef getsockname # define getsockname getsockname_used_without_requesting_gnulib_module_getsockname @@ -596,7 +605,9 @@ _GL_CXXALIAS_SYS_CAST (recvfrom, ssize_t, struct sockaddr *restrict from, socklen_t *restrict fromlen)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (recvfrom); +# endif #elif @HAVE_WINSOCK2_H@ # undef recvfrom # define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom diff --git a/tests/sys_stat.in.h b/tests/sys_stat.in.h index 0ec320f5..bf08f335 100644 --- a/tests/sys_stat.in.h +++ b/tests/sys_stat.in.h @@ -1,5 +1,5 @@ /* Provide a more complete sys/stat.h header file. - Copyright (C) 2005-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -25,6 +25,13 @@ #endif @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. + For the 'year2038' module to work right, <config.h> needs to have been + included before. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #if defined __need_system_sys_stat_h /* Special invocation convention. */ @@ -48,12 +55,41 @@ #ifndef _@GUARD_PREFIX@_SYS_STAT_H #define _@GUARD_PREFIX@_SYS_STAT_H +/* This file uses _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +# if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 +# if __cplusplus >= 201103L +# define _GL_ATTRIBUTE_NOTHROW noexcept (true) +# else +# define _GL_ATTRIBUTE_NOTHROW throw () +# endif +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# else +# if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +# else +# define _GL_ATTRIBUTE_NOTHROW +# endif +# endif +#endif + /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ + /* Before doing "#define mknod rpl_mknod" below, we need to include all headers that may declare mknod(). OS/2 kLIBC declares mknod() in <unistd.h>, not in <sys/stat.h>. */ @@ -549,7 +585,7 @@ _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif -# if @HAVE_FUTIMENS@ +# if __GLIBC__ >= 2 && @HAVE_FUTIMENS@ _GL_CXXALIASWARN (futimens); # endif #elif defined GNULIB_POSIXCHECK @@ -563,7 +599,11 @@ _GL_WARN_ON_USE (futimens, "futimens is not portable - " #if @GNULIB_GETUMASK@ # if !@HAVE_GETUMASK@ +# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (getumask, mode_t, (void) _GL_ATTRIBUTE_NOTHROW); +# else _GL_FUNCDECL_SYS (getumask, mode_t, (void)); +# endif # endif _GL_CXXALIAS_SYS (getumask, mode_t, (void)); # if @HAVE_GETUMASK@ @@ -716,7 +756,9 @@ _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) # endif _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (mkfifoat); +# endif #elif defined GNULIB_POSIXCHECK # undef mkfifoat # if HAVE_RAW_DECL_MKFIFOAT @@ -773,7 +815,9 @@ _GL_FUNCDECL_SYS (mknodat, int, _GL_CXXALIAS_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (mknodat); +# endif #elif defined GNULIB_POSIXCHECK # undef mknodat # if HAVE_RAW_DECL_MKNODAT @@ -937,7 +981,7 @@ _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # endif -# if @HAVE_UTIMENSAT@ +# if __GLIBC__ >= 2 && @HAVE_UTIMENSAT@ _GL_CXXALIASWARN (utimensat); # endif #elif defined GNULIB_POSIXCHECK diff --git a/tests/sys_time.in.h b/tests/sys_time.in.h index 87db1a88..4a301c48 100644 --- a/tests/sys_time.in.h +++ b/tests/sys_time.in.h @@ -1,6 +1,6 @@ /* Provide a more complete sys/time.h. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -24,6 +24,13 @@ #endif @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. + For the 'year2038' module to work right, <config.h> needs to have been + included before. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* On Cygwin and on many BSDish systems, <sys/time.h> includes itself recursively via <sys/select.h>. Simply delegate to the system's header in this case; it is a no-op. @@ -41,6 +48,11 @@ #ifndef _@GUARD_PREFIX@_SYS_TIME_H #define _@GUARD_PREFIX@_SYS_TIME_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #if ! @HAVE_SYS_TIME_H@ # include <time.h> #endif diff --git a/tests/sys_uio.in.h b/tests/sys_uio.in.h index 788d461f..5e71859d 100644 --- a/tests/sys_uio.in.h +++ b/tests/sys_uio.in.h @@ -1,5 +1,5 @@ /* Substitute for <sys/uio.h>. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/test-accept.c b/tests/test-accept.c index 234de641..ed02450b 100644 --- a/tests/test-accept.c +++ b/tests/test-accept.c @@ -1,5 +1,5 @@ /* Test accepting a connection to a server socket. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-stdalign.c b/tests/test-alignasof.c index a9355545..1cc75b0f 100644 --- a/tests/test-stdalign.c +++ b/tests/test-alignasof.c @@ -1,5 +1,5 @@ -/* Test of <stdalign.h>. - Copyright 2009-2022 Free Software Foundation, Inc. +/* Test of alignasof module. + Copyright 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -35,6 +35,7 @@ typedef struct { char a[4]; } struct4; limit the test to 8 for now. */ # define TEST_ALIGNMENT 8 #else +# undef alignas # define alignas(alignment) # define TEST_ALIGNMENT 1 #endif diff --git a/tests/test-alloca-opt.c b/tests/test-alloca-opt.c index a64ed82a..3f20779c 100644 --- a/tests/test-alloca-opt.c +++ b/tests/test-alloca-opt.c @@ -1,5 +1,5 @@ /* Test of optional automatic memory allocation. - Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-arpa_inet.c b/tests/test-arpa_inet.c index cfe4a7a2..77222638 100644 --- a/tests/test-arpa_inet.c +++ b/tests/test-arpa_inet.c @@ -1,5 +1,5 @@ /* Test of <arpa/inet.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-array-mergesort.c b/tests/test-array-mergesort.c index 5996bc31..71639d12 100644 --- a/tests/test-array-mergesort.c +++ b/tests/test-array-mergesort.c @@ -1,5 +1,5 @@ /* Test of stable-sorting of an array using mergesort. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published diff --git a/tests/test-assert.c b/tests/test-assert.c index 45b0c0f4..771eec34 100644 --- a/tests/test-assert.c +++ b/tests/test-assert.c @@ -1,5 +1,5 @@ /* Test assert.h and static_assert. - Copyright 2022 Free Software Foundation, Inc. + Copyright 2022-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -65,6 +65,7 @@ int main (void) { STATIC_ASSERT_TESTS; + f (""); g (); h (); return 0; diff --git a/tests/test-binary-io.c b/tests/test-binary-io.c index 2d71ae9c..32de2fe4 100644 --- a/tests/test-binary-io.c +++ b/tests/test-binary-io.c @@ -1,5 +1,5 @@ /* Test of binary mode I/O. - Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2005, 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ #include "macros.h" int -main (int argc, char *argv[]) +main (_GL_UNUSED int argc, char *argv[]) { /* Test the O_BINARY macro. */ { diff --git a/tests/test-binary-io.sh b/tests/test-binary-io.sh index a177d947..7bc5aa07 100755 --- a/tests/test-binary-io.sh +++ b/tests/test-binary-io.sh @@ -1,7 +1,7 @@ #!/bin/sh tmpfiles="" -trap 'rm -fr $tmpfiles' 1 2 3 15 +trap 'rm -fr $tmpfiles' HUP INT QUIT TERM tmpfiles="$tmpfiles t-bin-out0.tmp t-bin-out1.tmp" ${CHECKER} ./test-binary-io${EXEEXT} 1 > t-bin-out1.tmp || exit 1 diff --git a/tests/test-bind.c b/tests/test-bind.c index 17063bf7..0f8e783a 100644 --- a/tests/test-bind.c +++ b/tests/test-bind.c @@ -1,5 +1,5 @@ /* Test binding a server socket to a port. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-btoc32-1.sh b/tests/test-btoc32-1.sh new file mode 100755 index 00000000..25caea64 --- /dev/null +++ b/tests/test-btoc32-1.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Test whether the POSIX locale has encoding errors. +LC_ALL=C \ +${CHECKER} ./test-btoc32${EXEEXT} 1 || exit 1 +LC_ALL=POSIX \ +${CHECKER} ./test-btoc32${EXEEXT} 1 || exit 1 + +exit 0 diff --git a/tests/test-mbrtowc1.sh b/tests/test-btoc32-2.sh index 2b6eaf99..ba52767b 100755 --- a/tests/test-mbrtowc1.sh +++ b/tests/test-btoc32-2.sh @@ -12,4 +12,4 @@ if test $LOCALE_FR = none; then fi LC_ALL=$LOCALE_FR \ -${CHECKER} ./test-mbrtowc${EXEEXT} 1 +${CHECKER} ./test-btoc32${EXEEXT} 2 diff --git a/tests/test-mbrtowc2.sh b/tests/test-btoc32-3.sh index 6868e863..8c6b1803 100755 --- a/tests/test-mbrtowc2.sh +++ b/tests/test-btoc32-3.sh @@ -12,4 +12,4 @@ if test $LOCALE_FR_UTF8 = none; then fi LC_ALL=$LOCALE_FR_UTF8 \ -${CHECKER} ./test-mbrtowc${EXEEXT} 2 +${CHECKER} ./test-btoc32${EXEEXT} 3 diff --git a/tests/test-btoc32.c b/tests/test-btoc32.c new file mode 100644 index 00000000..7e15dcce --- /dev/null +++ b/tests/test-btoc32.c @@ -0,0 +1,94 @@ +/* Test of conversion of unibyte character to 32-bit wide character. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (btoc32, wint_t, (int)); + +#include <locale.h> +#include <stdio.h> +#include <wchar.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + int c; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + ASSERT (btoc32 (EOF) == WEOF); + +#ifdef __ANDROID__ + /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the + "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" + locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, + that is, effectively the "C.UTF-8" locale. */ + if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) + argv[1] = "3"; +#endif + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* C or POSIX locale. */ + for (c = 0; c < 0x100; c++) + if (c != 0) + { + /* We are testing all nonnull bytes. */ + wint_t wc = btoc32 (c); + /* POSIX:2018 says regarding btowc: "In the POSIX locale, btowc() + shall not return WEOF if c has a value in the range 0 to 255 + inclusive." It is reasonable to expect btoc32 to behave in + the same way. */ + if (c < 0x80) + /* c is an ASCII character. */ + ASSERT (wc == c); + else + /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. + But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ + ASSERT (wc == c || wc == 0xDF00 + c); + } + return 0; + + case '2': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + for (c = 0; c < 0x80; c++) + ASSERT (btoc32 (c) == c); + for (c = 0xA0; c < 0x100; c++) + ASSERT (btoc32 (c) != WEOF); + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + for (c = 0; c < 0x80; c++) + ASSERT (btoc32 (c) == c); + for (c = 0x80; c < 0x100; c++) + ASSERT (btoc32 (c) == WEOF); + return 0; + } + + return 1; +} diff --git a/tests/test-btowc-1.sh b/tests/test-btowc-1.sh new file mode 100755 index 00000000..d6776565 --- /dev/null +++ b/tests/test-btowc-1.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Test whether the POSIX locale has encoding errors. +LC_ALL=C \ +${CHECKER} ./test-btowc${EXEEXT} 1 || exit 1 +LC_ALL=POSIX \ +${CHECKER} ./test-btowc${EXEEXT} 1 || exit 1 + +exit 0 diff --git a/tests/test-btowc1.sh b/tests/test-btowc-2.sh index e51e1c5c..9f939d6c 100755 --- a/tests/test-btowc1.sh +++ b/tests/test-btowc-2.sh @@ -12,4 +12,4 @@ if test $LOCALE_FR = none; then fi LC_ALL=$LOCALE_FR \ -${CHECKER} ./test-btowc${EXEEXT} 1 +${CHECKER} ./test-btowc${EXEEXT} 2 diff --git a/tests/test-btowc2.sh b/tests/test-btowc-3.sh index 9f38f4e8..41244765 100755 --- a/tests/test-btowc2.sh +++ b/tests/test-btowc-3.sh @@ -12,4 +12,4 @@ if test $LOCALE_FR_UTF8 = none; then fi LC_ALL=$LOCALE_FR_UTF8 \ -${CHECKER} ./test-btowc${EXEEXT} 2 +${CHECKER} ./test-btowc${EXEEXT} 3 diff --git a/tests/test-btowc.c b/tests/test-btowc.c index 32806f07..aeac4bbf 100644 --- a/tests/test-btowc.c +++ b/tests/test-btowc.c @@ -1,5 +1,5 @@ /* Test of conversion of unibyte character to wide character. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -39,10 +39,38 @@ main (int argc, char *argv[]) ASSERT (btowc (EOF) == WEOF); +#ifdef __ANDROID__ + /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the + "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" + locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, + that is, effectively the "C.UTF-8" locale. */ + if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) + argv[1] = "3"; +#endif + if (argc > 1) switch (argv[1][0]) { case '1': + /* C or POSIX locale. */ + for (c = 0; c < 0x100; c++) + if (c != 0) + { + /* We are testing all nonnull bytes. */ + wint_t wc = btowc (c); + /* POSIX:2018 says: "In the POSIX locale, btowc() shall not return + WEOF if c has a value in the range 0 to 255 inclusive." */ + if (c < 0x80) + /* c is an ASCII character. */ + ASSERT (wc == c); + else + /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. + But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ + ASSERT (wc == c || wc == 0xDF00 + c); + } + return 0; + + case '2': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ for (c = 0; c < 0x80; c++) ASSERT (btowc (c) == c); @@ -50,7 +78,7 @@ main (int argc, char *argv[]) ASSERT (btowc (c) != WEOF); return 0; - case '2': + case '3': /* Locale encoding is UTF-8. */ for (c = 0; c < 0x80; c++) ASSERT (btowc (c) == c); diff --git a/tests/test-c-ctype.c b/tests/test-c-ctype.c index 9870520d..8414a31d 100644 --- a/tests/test-c-ctype.c +++ b/tests/test-c-ctype.c @@ -1,5 +1,5 @@ /* Test of character handling in C locale. - Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2005, 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-c-strcasecmp.c b/tests/test-c-strcasecmp.c index 1bb518da..fd07e009 100644 --- a/tests/test-c-strcasecmp.c +++ b/tests/test-c-strcasecmp.c @@ -1,5 +1,5 @@ /* Test of case-insensitive string comparison function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-c-strncasecmp.c b/tests/test-c-strncasecmp.c index 734eb87b..a8bb3358 100644 --- a/tests/test-c-strncasecmp.c +++ b/tests/test-c-strncasecmp.c @@ -1,5 +1,5 @@ /* Test of case-insensitive string comparison function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-c32isalnum.c b/tests/test-c32isalnum.c new file mode 100644 index 00000000..4f75e0f4 --- /dev/null +++ b/tests/test-c32isalnum.c @@ -0,0 +1,261 @@ +/* Test of c32isalnum() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isalnum, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isalnum for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32isalnum (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32isalnum (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + that + - in all locales, the alphanumeric characters include the uppercase and + lowercase characters and digits and, consequently, include the A ... Z + and a ... z and 0 ... 9 characters. + - in the "POSIX" locale (which is usually the same as the "C" locale), + the alphanumeric characters include only the ASCII A ... Z and a ... z + and 0 ... 9 characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\327", 1); + ASSERT (is == 0); + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\330", 1); + ASSERT (is != 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\241\337", 2); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\217\251\254", 3); + ASSERT (is != 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\217\251\250", 3); + ASSERT (is != 0); + #endif + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\241\242", 2); + ASSERT (is == 0); + #if defined __GLIBC__ + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is != 0); + #endif + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) + /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ + is = for_character ("\243\355", 2); + ASSERT (is != 0); + #endif + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\303\227", 2); + ASSERT (is == 0); + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\303\230", 2); + ASSERT (is != 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\305\201", 2); + ASSERT (is != 0); + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\343\200\201", 3); + ASSERT (is == 0); + #if defined __GLIBC__ + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\357\274\221", 3); + ASSERT (is != 0); + #endif + /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ + is = for_character ("\357\275\215", 3); + ASSERT (is != 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+10330 GOTHIC LETTER AHSA */ + is = for_character ("\360\220\214\260", 4); + ASSERT (is != 0); + #endif + /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ + is = for_character ("\360\235\204\200", 4); + ASSERT (is == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + is = for_character ("\363\240\201\241", 4); + ASSERT (is == 0); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\241\301", 2); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\201\060\211\061", 4); + ASSERT (is != 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\201\060\221\071", 4); + ASSERT (is != 0); + #endif + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\241\242", 2); + ASSERT (is == 0); + #if defined __GLIBC__ + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is != 0); + #endif + #if !defined __DragonFly__ + /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ + is = for_character ("\243\355", 2); + ASSERT (is != 0); + #endif + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+10330 GOTHIC LETTER AHSA */ + is = for_character ("\220\060\322\066", 4); + ASSERT (is != 0); + #endif + /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ + is = for_character ("\224\062\273\064", 4); + ASSERT (is == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + is = for_character ("\323\066\237\065", 4); + ASSERT (is == 0); + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32isalnum.sh b/tests/test-c32isalnum.sh new file mode 100755 index 00000000..df94aade --- /dev/null +++ b/tests/test-c32isalnum.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32isalnum${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isalnum${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32isalnum${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32isalnum${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32isalnum${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32isalnum${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32isalpha.c b/tests/test-c32isalpha.c new file mode 100644 index 00000000..14c78d7d --- /dev/null +++ b/tests/test-c32isalpha.c @@ -0,0 +1,259 @@ +/* Test of c32isalpha() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isalpha, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isalpha for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32isalpha (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32isalpha (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + that + - in all locales, the alphabetic characters include the uppercase and + lowercase characters and, consequently, include the A ... Z and a ... z + characters. + - in the "POSIX" locale (which is usually the same as the "C" locale), + the alphabetic characters include only the ASCII A ... Z and a ... z + characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\327", 1); + ASSERT (is == 0); + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\330", 1); + ASSERT (is != 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\241\337", 2); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\217\251\254", 3); + ASSERT (is != 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\217\251\250", 3); + ASSERT (is != 0); + #endif + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\241\242", 2); + ASSERT (is == 0); + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined __sun || defined __CYGWIN__) + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is == 0); + #endif + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) + /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ + is = for_character ("\243\355", 2); + ASSERT (is != 0); + #endif + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\303\227", 2); + ASSERT (is == 0); + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\303\230", 2); + ASSERT (is != 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\305\201", 2); + ASSERT (is != 0); + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\343\200\201", 3); + ASSERT (is == 0); + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\357\274\221", 3); + ASSERT (is == 0); + #endif + /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ + is = for_character ("\357\275\215", 3); + ASSERT (is != 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+10330 GOTHIC LETTER AHSA */ + is = for_character ("\360\220\214\260", 4); + ASSERT (is != 0); + #endif + /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ + is = for_character ("\360\235\204\200", 4); + ASSERT (is == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + is = for_character ("\363\240\201\241", 4); + ASSERT (is == 0); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\241\301", 2); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\201\060\211\061", 4); + ASSERT (is != 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\201\060\221\071", 4); + ASSERT (is != 0); + #endif + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\241\242", 2); + ASSERT (is == 0); + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is == 0); + #endif + #if !defined __DragonFly__ + /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ + is = for_character ("\243\355", 2); + ASSERT (is != 0); + #endif + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+10330 GOTHIC LETTER AHSA */ + is = for_character ("\220\060\322\066", 4); + ASSERT (is != 0); + #endif + /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ + is = for_character ("\224\062\273\064", 4); + ASSERT (is == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + is = for_character ("\323\066\237\065", 4); + ASSERT (is == 0); + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32isalpha.sh b/tests/test-c32isalpha.sh new file mode 100755 index 00000000..11c896fa --- /dev/null +++ b/tests/test-c32isalpha.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32isalpha${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isalpha${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32isalpha${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32isalpha${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32isalpha${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32isalpha${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32isblank.c b/tests/test-c32isblank.c new file mode 100644 index 00000000..0e722b25 --- /dev/null +++ b/tests/test-c32isblank.c @@ -0,0 +1,205 @@ +/* Test of c32isblank() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isblank, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isblank for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32isblank (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32isblank (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + that + - in all locales, the blank characters include the <space> and <tab> + characters, + - in the "POSIX" locale (which is usually the same as the "C" locale), + the blank characters include only the ASCII <space> and <tab> + characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': + #if !(defined __FreeBSD__ || defined __NetBSD__) + case '\v': + #endif + case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + if (c == '\t' || c == ' ') + ASSERT (is != 0); + else + ASSERT (is == 0); + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + #if defined __GLIBC__ + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\240", 1); + ASSERT (is == 0); + #endif + /* U+00B7 MIDDLE DOT */ + is = for_character ("\267", 1); + ASSERT (is == 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + /* U+3002 IDEOGRAPHIC FULL STOP */ + is = for_character ("\241\243", 2); + ASSERT (is == 0); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + #if defined __GLIBC__ + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\302\240", 2); + ASSERT (is == 0); + #endif + /* U+00B7 MIDDLE DOT */ + is = for_character ("\302\267", 2); + ASSERT (is == 0); + #if defined __GLIBC__ + /* U+202F NARROW NO-BREAK SPACE */ + is = for_character ("\342\200\257", 3); + ASSERT (is == 0); + #endif + /* U+3002 IDEOGRAPHIC FULL STOP */ + is = for_character ("\343\200\202", 3); + ASSERT (is == 0); + /* U+1D13D MUSICAL SYMBOL QUARTER REST */ + is = for_character ("\360\235\204\275", 4); + ASSERT (is == 0); + /* U+E0020 TAG SPACE */ + is = for_character ("\363\240\200\240", 4); + ASSERT (is == 0); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + #if defined __GLIBC__ + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\201\060\204\062", 4); + ASSERT (is == 0); + #endif + /* U+00B7 MIDDLE DOT */ + is = for_character ("\241\244", 2); + ASSERT (is == 0); + #if defined __GLIBC__ + /* U+202F NARROW NO-BREAK SPACE */ + is = for_character ("\201\066\247\062", 4); + ASSERT (is == 0); + #endif + /* U+3002 IDEOGRAPHIC FULL STOP */ + is = for_character ("\241\243", 2); + ASSERT (is == 0); + /* U+1D13D MUSICAL SYMBOL QUARTER REST */ + is = for_character ("\224\062\301\065", 4); + ASSERT (is == 0); + /* U+E0020 TAG SPACE */ + is = for_character ("\323\066\231\060", 4); + ASSERT (is == 0); + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32isblank.sh b/tests/test-c32isblank.sh new file mode 100755 index 00000000..fe5f9b86 --- /dev/null +++ b/tests/test-c32isblank.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32isblank${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isblank${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32isblank${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32isblank${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32isblank${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32isblank${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32iscntrl.c b/tests/test-c32iscntrl.c new file mode 100644 index 00000000..674c5804 --- /dev/null +++ b/tests/test-c32iscntrl.c @@ -0,0 +1,212 @@ +/* Test of c32iscntrl() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32iscntrl, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32iscntrl for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32iscntrl (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32iscntrl (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + no explicit list of control characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case '\t': case '\v': case '\f': + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is != 0); + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\240", 1); + ASSERT (is == 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is != 0); + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\241\241", 2); + ASSERT (is == 0); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is != 0); + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\302\240", 2); + ASSERT (is == 0); + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) + /* U+202E RIGHT-TO-LEFT OVERRIDE */ + is = for_character ("\342\200\256", 3); + ASSERT (is != 0); + #endif + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\343\200\200", 3); + ASSERT (is == 0); + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) + /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ + is = for_character ("\357\273\277", 3); + ASSERT (is != 0); + #endif + /* U+20000 <CJK Ideograph> */ + is = for_character ("\360\240\200\200", 4); + ASSERT (is == 0); + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) + /* U+E0001 LANGUAGE TAG */ + is = for_character ("\363\240\200\201", 4); + ASSERT (is != 0); + #endif + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is != 0); + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\201\060\204\062", 4); + ASSERT (is == 0); + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+202E RIGHT-TO-LEFT OVERRIDE */ + is = for_character ("\201\066\247\061", 4); + ASSERT (is != 0); + #endif + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\241\241", 2); + ASSERT (is == 0); + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ + is = for_character ("\204\061\225\063", 4); + ASSERT (is != 0); + #endif + /* U+20000 <CJK Ideograph> */ + is = for_character ("\225\062\202\066", 4); + ASSERT (is == 0); + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+E0001 LANGUAGE TAG */ + is = for_character ("\323\066\225\071", 4); + ASSERT (is != 0); + #endif + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32iscntrl.sh b/tests/test-c32iscntrl.sh new file mode 100755 index 00000000..b27747c7 --- /dev/null +++ b/tests/test-c32iscntrl.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32iscntrl${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32iscntrl${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32iscntrl${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32iscntrl${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32iscntrl${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32iscntrl${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32isdigit.c b/tests/test-c32isdigit.c new file mode 100644 index 00000000..82b77015 --- /dev/null +++ b/tests/test-c32isdigit.c @@ -0,0 +1,236 @@ +/* Test of c32isdigit() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isdigit, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isdigit for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32isdigit (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32isdigit (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + ISO C 99 sections 7.25.2.1.5 and 5.2.1 specify that the decimal digits + include only the ASCII 0 ... 9 characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\262", 1); + ASSERT (is == 0); + /* U+00B3 SUPERSCRIPT THREE */ + is = for_character ("\263", 1); + ASSERT (is == 0); + /* U+00B9 SUPERSCRIPT ONE */ + is = for_character ("\271", 1); + ASSERT (is == 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is == 0); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\302\262", 2); + ASSERT (is == 0); + /* U+00B3 SUPERSCRIPT THREE */ + is = for_character ("\302\263", 2); + ASSERT (is == 0); + /* U+00B9 SUPERSCRIPT ONE */ + is = for_character ("\302\271", 2); + ASSERT (is == 0); + /* U+0663 ARABIC-INDIC DIGIT THREE */ + is = for_character ("\331\243", 2); + ASSERT (is == 0); + /* U+2070 SUPERSCRIPT ZERO */ + is = for_character ("\342\201\260", 3); + ASSERT (is == 0); + /* U+2079 SUPERSCRIPT NINE */ + is = for_character ("\342\201\271", 3); + ASSERT (is == 0); + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\357\274\221", 3); + ASSERT (is == 0); + /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ + is = for_character ("\360\235\237\221", 4); + ASSERT (is == 0); + /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ + is = for_character ("\360\235\237\233", 4); + ASSERT (is == 0); + /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ + is = for_character ("\360\235\237\245", 4); + ASSERT (is == 0); + /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ + is = for_character ("\360\235\237\257", 4); + ASSERT (is == 0); + /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ + is = for_character ("\360\235\237\271", 4); + ASSERT (is == 0); + /* U+E0033 TAG DIGIT THREE */ + is = for_character ("\363\240\200\263", 4); + ASSERT (is == 0); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\201\060\205\065", 4); + ASSERT (is == 0); + /* U+00B3 SUPERSCRIPT THREE */ + is = for_character ("\201\060\205\066", 4); + ASSERT (is == 0); + /* U+00B9 SUPERSCRIPT ONE */ + is = for_character ("\201\060\206\061", 4); + ASSERT (is == 0); + /* U+0663 ARABIC-INDIC DIGIT THREE */ + is = for_character ("\201\061\211\071", 4); + ASSERT (is == 0); + /* U+2070 SUPERSCRIPT ZERO */ + is = for_character ("\201\066\255\062", 4); + ASSERT (is == 0); + /* U+2079 SUPERSCRIPT NINE */ + is = for_character ("\201\066\256\061", 4); + ASSERT (is == 0); + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is == 0); + /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ + is = for_character ("\224\063\353\071", 4); + ASSERT (is == 0); + /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ + is = for_character ("\224\063\354\071", 4); + ASSERT (is == 0); + /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ + is = for_character ("\224\063\355\071", 4); + ASSERT (is == 0); + /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ + is = for_character ("\224\063\356\071", 4); + ASSERT (is == 0); + /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ + is = for_character ("\224\063\357\071", 4); + ASSERT (is == 0); + /* U+E0033 TAG DIGIT THREE */ + is = for_character ("\323\066\232\071", 4); + ASSERT (is == 0); + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32isdigit.sh b/tests/test-c32isdigit.sh new file mode 100755 index 00000000..158d3628 --- /dev/null +++ b/tests/test-c32isdigit.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32isdigit${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isdigit${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32isdigit${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32isdigit${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32isdigit${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32isdigit${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32isgraph.c b/tests/test-c32isgraph.c new file mode 100644 index 00000000..fb993bbb --- /dev/null +++ b/tests/test-c32isgraph.c @@ -0,0 +1,247 @@ +/* Test of c32isgraph() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isgraph, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isgraph for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32isgraph (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32isgraph (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + no explicit list of graphic characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': + ASSERT (is == 0); + break; + default: + ASSERT (is != 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sgi || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\240", 1); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+00B8 CEDILLA */ + is = for_character ("\270", 1); + ASSERT (is != 0); + #endif + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) + /* U+00B8 CEDILLA */ + is = for_character ("\217\242\261", 3); + ASSERT (is != 0); + #endif + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\241\241", 2); + ASSERT (is == 0); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\302\240", 2); + ASSERT (is != 0); + #endif + /* U+00B8 CEDILLA */ + is = for_character ("\302\270", 2); + ASSERT (is != 0); + /* U+2002 EN SPACE */ + is = for_character ("\342\200\202", 3); + ASSERT (is == 0); + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) + /* U+202E RIGHT-TO-LEFT OVERRIDE */ + is = for_character ("\342\200\256", 3); + ASSERT (is == 0); + #endif + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\343\200\200", 3); + ASSERT (is == 0); + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) + /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ + is = for_character ("\357\273\277", 3); + ASSERT (is == 0); + #endif + #if !defined __sun + /* U+20000 <CJK Ideograph> */ + is = for_character ("\360\240\200\200", 4); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) + /* U+E0001 LANGUAGE TAG */ + is = for_character ("\363\240\200\201", 4); + ASSERT (is == 0); + #endif + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\201\060\204\062", 4); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00B8 CEDILLA */ + is = for_character ("\201\060\206\060", 4); + ASSERT (is != 0); + #endif + /* U+2002 EN SPACE */ + is = for_character ("\201\066\243\070", 4); + ASSERT (is == 0); + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) + /* U+202E RIGHT-TO-LEFT OVERRIDE */ + is = for_character ("\201\066\247\061", 4); + ASSERT (is == 0); + #endif + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\241\241", 2); + ASSERT (is == 0); + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) + /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ + is = for_character ("\204\061\225\063", 4); + ASSERT (is == 0); + #endif + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+20000 <CJK Ideograph> */ + is = for_character ("\225\062\202\066", 4); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) + /* U+E0001 LANGUAGE TAG */ + is = for_character ("\323\066\225\071", 4); + ASSERT (is == 0); + #endif + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32isgraph.sh b/tests/test-c32isgraph.sh new file mode 100755 index 00000000..be760fb2 --- /dev/null +++ b/tests/test-c32isgraph.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32isgraph${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isgraph${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32isgraph${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32isgraph${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32isgraph${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32isgraph${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32islower.c b/tests/test-c32islower.c new file mode 100644 index 00000000..3b799677 --- /dev/null +++ b/tests/test-c32islower.c @@ -0,0 +1,354 @@ +/* Test of c32islower() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32islower, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32islower for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32islower (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32islower (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + that + - in all locales, the lowercase characters include the a ... z + characters, + - in the "POSIX" locale (which is usually the same as the "C" locale), + the lowercase characters include only the ASCII a ... z characters. + */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\262", 1); + ASSERT (is == 0); + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) + /* U+00B5 MICRO SIGN */ + is = for_character ("\265", 1); + ASSERT (is == 0); + #endif + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + is = for_character ("\311", 1); + ASSERT (is == 0); + #if !defined __CYGWIN__ + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\337", 1); + ASSERT (is != 0); + #endif + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + is = for_character ("\351", 1); + ASSERT (is != 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + is = for_character ("\377", 1); + ASSERT (is != 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + is = for_character ("\217\252\261", 3); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __CYGWIN__) + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\217\251\316", 3); + ASSERT (is != 0); + #endif + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + is = for_character ("\217\253\261", 3); + ASSERT (is != 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + is = for_character ("\217\253\363", 3); + ASSERT (is != 0); + #endif + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\217\251\250", 3); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) + /* U+0142 LATIN SMALL LETTER L WITH STROKE */ + is = for_character ("\217\251\310", 3); + ASSERT (is != 0); + #endif + /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ + is = for_character ("\247\273", 2); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+0449 CYRILLIC SMALL LETTER SHCHA */ + is = for_character ("\247\353", 2); + ASSERT (is != 0); + #endif + /* U+3073 HIRAGANA LETTER BI */ + is = for_character ("\244\323", 2); + ASSERT (is == 0); + #if !defined __DragonFly__ + /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ + is = for_character ("\243\347", 2); + ASSERT (is != 0); + #endif + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\302\262", 2); + ASSERT (is == 0); + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) + /* U+00B5 MICRO SIGN */ + is = for_character ("\302\265", 2); + ASSERT (is == 0); + #endif + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + is = for_character ("\303\211", 2); + ASSERT (is == 0); + #if !defined __CYGWIN__ + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\303\237", 2); + ASSERT (is != 0); + #endif + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + is = for_character ("\303\251", 2); + ASSERT (is != 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + is = for_character ("\303\277", 2); + ASSERT (is != 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\305\201", 2); + ASSERT (is == 0); + /* U+0142 LATIN SMALL LETTER L WITH STROKE */ + is = for_character ("\305\202", 2); + ASSERT (is != 0); + /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ + is = for_character ("\320\251", 2); + ASSERT (is == 0); + /* U+0449 CYRILLIC SMALL LETTER SHCHA */ + is = for_character ("\321\211", 2); + ASSERT (is != 0); + /* U+05D5 HEBREW LETTER VAV */ + is = for_character ("\327\225", 2); + ASSERT (is == 0); + /* U+3073 HIRAGANA LETTER BI */ + is = for_character ("\343\201\263", 3); + ASSERT (is == 0); + /* U+3162 HANGUL LETTER YI */ + is = for_character ("\343\205\242", 3); + ASSERT (is == 0); + /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ + is = for_character ("\357\275\207", 3); + ASSERT (is != 0); + /* U+FFDB HALFWIDTH HANGUL LETTER YI */ + is = for_character ("\357\277\233", 3); + ASSERT (is == 0); + /* U+10419 DESERET CAPITAL LETTER EF */ + is = for_character ("\360\220\220\231", 4); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+10441 DESERET SMALL LETTER EF */ + is = for_character ("\360\220\221\201", 4); + ASSERT (is != 0); + #endif + /* U+E0041 TAG LATIN CAPITAL LETTER A */ + is = for_character ("\363\240\201\201", 4); + ASSERT (is == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + is = for_character ("\363\240\201\241", 4); + ASSERT (is == 0); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\201\060\205\065", 4); + ASSERT (is == 0); + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__) + /* U+00B5 MICRO SIGN */ + is = for_character ("\201\060\205\070", 4); + ASSERT (is == 0); + #endif + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + is = for_character ("\201\060\207\067", 4); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\201\060\211\070", 4); + ASSERT (is != 0); + #endif + #if !defined __DragonFly__ + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + is = for_character ("\250\246", 2); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + is = for_character ("\201\060\213\067", 4); + ASSERT (is != 0); + #endif + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\201\060\221\071", 4); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+0142 LATIN SMALL LETTER L WITH STROKE */ + is = for_character ("\201\060\222\060", 4); + ASSERT (is != 0); + #endif + /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ + is = for_character ("\247\273", 2); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+0449 CYRILLIC SMALL LETTER SHCHA */ + is = for_character ("\247\353", 2); + ASSERT (is != 0); + #endif + /* U+05D5 HEBREW LETTER VAV */ + is = for_character ("\201\060\371\067", 4); + ASSERT (is == 0); + /* U+3073 HIRAGANA LETTER BI */ + is = for_character ("\244\323", 2); + ASSERT (is == 0); + /* U+3162 HANGUL LETTER YI */ + is = for_character ("\201\071\256\062", 4); + ASSERT (is == 0); + #if !defined __DragonFly__ + /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ + is = for_character ("\243\347", 2); + ASSERT (is != 0); + #endif + /* U+FFDB HALFWIDTH HANGUL LETTER YI */ + is = for_character ("\204\061\241\071", 4); + ASSERT (is == 0); + /* U+10419 DESERET CAPITAL LETTER EF */ + is = for_character ("\220\060\351\071", 4); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+10441 DESERET SMALL LETTER EF */ + is = for_character ("\220\060\355\071", 4); + ASSERT (is != 0); + #endif + /* U+E0041 TAG LATIN CAPITAL LETTER A */ + is = for_character ("\323\066\234\063", 4); + ASSERT (is == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + is = for_character ("\323\066\237\065", 4); + ASSERT (is == 0); + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32islower.sh b/tests/test-c32islower.sh new file mode 100755 index 00000000..f8b9840c --- /dev/null +++ b/tests/test-c32islower.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32islower${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32islower${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32islower${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32islower${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32islower${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32islower${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32isprint.c b/tests/test-c32isprint.c new file mode 100644 index 00000000..d28eb492 --- /dev/null +++ b/tests/test-c32isprint.c @@ -0,0 +1,250 @@ +/* Test of c32isprint() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isprint, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isprint for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32isprint (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32isprint (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + no explicit list of printable characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case '\t': case '\v': case '\f': + ASSERT (is == 0); + break; + default: + ASSERT (is != 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sgi || (defined _WIN32 && !defined __CYGWIN__)) + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\240", 1); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+00B8 CEDILLA */ + is = for_character ("\270", 1); + ASSERT (is != 0); + #endif + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) + /* U+00B8 CEDILLA */ + is = for_character ("\217\242\261", 3); + ASSERT (is != 0); + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\241\241", 2); + ASSERT (is != 0); + #endif + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun || (defined _WIN32 && !defined __CYGWIN__)) + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\302\240", 2); + ASSERT (is != 0); + #endif + /* U+00B8 CEDILLA */ + is = for_character ("\302\270", 2); + ASSERT (is != 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun || (defined _WIN32 && !defined __CYGWIN__)) + /* U+2002 EN SPACE */ + is = for_character ("\342\200\202", 3); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) + /* U+202E RIGHT-TO-LEFT OVERRIDE */ + is = for_character ("\342\200\256", 3); + ASSERT (is == 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\343\200\200", 3); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) + /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ + is = for_character ("\357\273\277", 3); + ASSERT (is == 0); + #endif + #if !defined __sun + /* U+20000 <CJK Ideograph> */ + is = for_character ("\360\240\200\200", 4); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) + /* U+E0001 LANGUAGE TAG */ + is = for_character ("\363\240\200\201", 4); + ASSERT (is == 0); + #endif + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+007F <control> */ + is = for_character ("\177", 1); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00A0 NO-BREAK SPACE */ + is = for_character ("\201\060\204\062", 4); + ASSERT (is != 0); + /* U+00B8 CEDILLA */ + is = for_character ("\201\060\206\060", 4); + ASSERT (is != 0); + /* U+2002 EN SPACE */ + is = for_character ("\201\066\243\070", 4); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) + /* U+202E RIGHT-TO-LEFT OVERRIDE */ + is = for_character ("\201\066\247\061", 4); + ASSERT (is == 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\241\241", 2); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) + /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ + is = for_character ("\204\061\225\063", 4); + ASSERT (is == 0); + #endif + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+20000 <CJK Ideograph> */ + is = for_character ("\225\062\202\066", 4); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) + /* U+E0001 LANGUAGE TAG */ + is = for_character ("\323\066\225\071", 4); + ASSERT (is == 0); + #endif + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32isprint.sh b/tests/test-c32isprint.sh new file mode 100755 index 00000000..d455413b --- /dev/null +++ b/tests/test-c32isprint.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32isprint${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isprint${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32isprint${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32isprint${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32isprint${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32isprint${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32ispunct.c b/tests/test-c32ispunct.c new file mode 100644 index 00000000..1b9f8e3b --- /dev/null +++ b/tests/test-c32ispunct.c @@ -0,0 +1,330 @@ +/* Test of c32ispunct() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32ispunct, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32ispunct for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32ispunct (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32ispunct (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + no explicit list of punctuation or symbol characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case ' ': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': + /* c is an alphanumeric or space character. */ + ASSERT (is == 0); + break; + case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case ':': case ';': case '<': case '=': case '>': + case '?': + case '[': case '\\': case ']': case '^': case '_': + case '{': case '|': case '}': case '~': + /* These characters are usually expected to be punctuation or + symbol characters. */ + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + /* These characters are not in the ISO C "basic character set", but + are nevertheless usually expected to be punctuation or symbol + characters. */ + is = for_character ("$", 1); + ASSERT (is != 0); + is = for_character ("@", 1); + ASSERT (is != 0); + is = for_character ("`", 1); + ASSERT (is != 0); + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+00BF INVERTED QUESTION MARK */ + is = for_character ("\277", 1); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\327", 1); + ASSERT (is != 0); + #endif + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\330", 1); + ASSERT (is == 0); + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\337", 1); + ASSERT (is == 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) + /* U+00BF INVERTED QUESTION MARK */ + is = for_character ("\217\242\304", 3); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\241\337", 2); + ASSERT (is != 0); + #endif + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\217\251\254", 3); + ASSERT (is == 0); + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\217\251\316", 3); + ASSERT (is == 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\217\251\250", 3); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) + /* U+2192 RIGHTWARDS ARROW */ + is = for_character ("\242\252", 2); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\241\242", 2); + ASSERT (is != 0); + #endif + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is == 0); + /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ + is = for_character ("\243\355", 2); + ASSERT (is == 0); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+00BF INVERTED QUESTION MARK */ + is = for_character ("\302\277", 2); + ASSERT (is != 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\303\227", 2); + ASSERT (is != 0); + #endif + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\303\230", 2); + ASSERT (is == 0); + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\303\237", 2); + ASSERT (is == 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\305\201", 2); + ASSERT (is == 0); + /* U+05F3 HEBREW PUNCTUATION GERESH */ + is = for_character ("\327\263", 2); + ASSERT (is != 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun || (defined _WIN32 && !defined __CYGWIN__)) + /* U+2192 RIGHTWARDS ARROW */ + is = for_character ("\342\206\222", 3); + ASSERT (is != 0); + #endif + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\343\200\201", 3); + ASSERT (is != 0); + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\357\274\221", 3); + ASSERT (is == 0); + /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ + is = for_character ("\357\275\215", 3); + ASSERT (is == 0); + /* U+10330 GOTHIC LETTER AHSA */ + is = for_character ("\360\220\214\260", 4); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ + is = for_character ("\360\235\204\200", 4); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) + /* U+E003A TAG COLON */ + is = for_character ("\363\240\200\272", 4); + ASSERT (is == 0); + #endif + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00BF INVERTED QUESTION MARK */ + is = for_character ("\201\060\206\067", 4); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+00D7 MULTIPLICATION SIGN */ + is = for_character ("\241\301", 2); + ASSERT (is != 0); + #endif + /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ + is = for_character ("\201\060\211\061", 4); + ASSERT (is == 0); + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\201\060\211\070", 4); + ASSERT (is == 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\201\060\221\071", 4); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+05F3 HEBREW PUNCTUATION GERESH */ + is = for_character ("\201\060\374\067", 4); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+2192 RIGHTWARDS ARROW */ + is = for_character ("\241\372", 2); + ASSERT (is != 0); + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\241\242", 2); + ASSERT (is != 0); + #endif + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is == 0); + /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ + is = for_character ("\243\355", 2); + ASSERT (is == 0); + /* U+10330 GOTHIC LETTER AHSA */ + is = for_character ("\220\060\322\066", 4); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ + is = for_character ("\224\062\273\064", 4); + ASSERT (is != 0); + #endif + #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) + /* U+E003A TAG COLON */ + is = for_character ("\323\066\233\066", 4); + ASSERT (is == 0); + #endif + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32ispunct.sh b/tests/test-c32ispunct.sh new file mode 100755 index 00000000..d818bcf7 --- /dev/null +++ b/tests/test-c32ispunct.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32ispunct${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32ispunct${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32ispunct${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32ispunct${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32ispunct${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32ispunct${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32isspace.c b/tests/test-c32isspace.c new file mode 100644 index 00000000..15cf387d --- /dev/null +++ b/tests/test-c32isspace.c @@ -0,0 +1,198 @@ +/* Test of c32isspace() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isspace, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isspace for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32isspace (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32isspace (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + that + - in all locales, the white-space characters include the <space>, + <form-feed>, <newline>, <carriage-return>, <tab>, <vertical-tab> + characters, + - in the "POSIX" locale (which is usually the same as the "C" locale), + the white-space characters include only the ASCII <space>, <form-feed>, + <newline>, <carriage-return>, <tab>, <vertical-tab> characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\f': case '\n': case '\r': case '\t': case '\v': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set" or one of the explicitly + mentioned white-space characters. */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case ' ': case '\f': case '\n': case '\r': case '\t': case '\v': + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+00B7 MIDDLE DOT */ + is = for_character ("\267", 1); + ASSERT (is == 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\241\241", 2); + ASSERT (is != 0); + #endif + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\241\242", 2); + ASSERT (is == 0); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+00B7 MIDDLE DOT */ + is = for_character ("\302\267", 2); + ASSERT (is == 0); + /* U+2002 EN SPACE */ + is = for_character ("\342\200\202", 3); + ASSERT (is != 0); + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\343\200\200", 3); + ASSERT (is != 0); + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\343\200\201", 3); + ASSERT (is == 0); + /* U+E0020 TAG SPACE */ + is = for_character ("\363\240\200\240", 4); + ASSERT (is == 0); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+00B7 MIDDLE DOT */ + is = for_character ("\241\244", 2); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+2002 EN SPACE */ + is = for_character ("\201\066\243\070", 4); + ASSERT (is != 0); + #endif + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+3000 IDEOGRAPHIC SPACE */ + is = for_character ("\241\241", 2); + ASSERT (is != 0); + #endif + /* U+3001 IDEOGRAPHIC COMMA */ + is = for_character ("\241\242", 2); + ASSERT (is == 0); + /* U+E0020 TAG SPACE */ + is = for_character ("\323\066\231\060", 4); + ASSERT (is == 0); + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32isspace.sh b/tests/test-c32isspace.sh new file mode 100755 index 00000000..a704d86b --- /dev/null +++ b/tests/test-c32isspace.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32isspace${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isspace${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32isspace${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32isspace${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32isspace${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32isspace${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32isupper.c b/tests/test-c32isupper.c new file mode 100644 index 00000000..178b0d19 --- /dev/null +++ b/tests/test-c32isupper.c @@ -0,0 +1,340 @@ +/* Test of c32isupper() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isupper, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isupper for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32isupper (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32isupper (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + that + - in all locales, the uppercase characters include the A ... Z + characters, + - in the "POSIX" locale (which is usually the same as the "C" locale), + the uppercase characters include only the ASCII A ... Z characters. + */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\262", 1); + ASSERT (is == 0); + /* U+00B5 MICRO SIGN */ + is = for_character ("\265", 1); + ASSERT (is == 0); + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + is = for_character ("\311", 1); + ASSERT (is != 0); + #if !defined __hpux + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\337", 1); + ASSERT (is == 0); + #endif + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + is = for_character ("\351", 1); + ASSERT (is == 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + is = for_character ("\377", 1); + ASSERT (is == 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + is = for_character ("\217\252\261", 3); + ASSERT (is != 0); + #endif + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\217\251\316", 3); + ASSERT (is == 0); + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + is = for_character ("\217\253\261", 3); + ASSERT (is == 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + is = for_character ("\217\253\363", 3); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\217\251\250", 3); + ASSERT (is != 0); + #endif + /* U+0142 LATIN SMALL LETTER L WITH STROKE */ + is = for_character ("\217\251\310", 3); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ + is = for_character ("\247\273", 2); + ASSERT (is != 0); + #endif + /* U+0449 CYRILLIC SMALL LETTER SHCHA */ + is = for_character ("\247\353", 2); + ASSERT (is == 0); + /* U+3073 HIRAGANA LETTER BI */ + is = for_character ("\244\323", 2); + ASSERT (is == 0); + #if !defined __DragonFly__ + /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ + is = for_character ("\243\307", 2); + ASSERT (is != 0); + #endif + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\302\262", 2); + ASSERT (is == 0); + /* U+00B5 MICRO SIGN */ + is = for_character ("\302\265", 2); + ASSERT (is == 0); + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + is = for_character ("\303\211", 2); + ASSERT (is != 0); + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\303\237", 2); + ASSERT (is == 0); + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + is = for_character ("\303\251", 2); + ASSERT (is == 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + is = for_character ("\303\277", 2); + ASSERT (is == 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\305\201", 2); + ASSERT (is != 0); + /* U+0142 LATIN SMALL LETTER L WITH STROKE */ + is = for_character ("\305\202", 2); + ASSERT (is == 0); + /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ + is = for_character ("\320\251", 2); + ASSERT (is != 0); + /* U+0449 CYRILLIC SMALL LETTER SHCHA */ + is = for_character ("\321\211", 2); + ASSERT (is == 0); + /* U+05D5 HEBREW LETTER VAV */ + is = for_character ("\327\225", 2); + ASSERT (is == 0); + /* U+3073 HIRAGANA LETTER BI */ + is = for_character ("\343\201\263", 3); + ASSERT (is == 0); + /* U+3162 HANGUL LETTER YI */ + is = for_character ("\343\205\242", 3); + ASSERT (is == 0); + /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ + is = for_character ("\357\274\247", 3); + ASSERT (is != 0); + /* U+FFDB HALFWIDTH HANGUL LETTER YI */ + is = for_character ("\357\277\233", 3); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+10419 DESERET CAPITAL LETTER EF */ + is = for_character ("\360\220\220\231", 4); + ASSERT (is != 0); + #endif + /* U+10441 DESERET SMALL LETTER EF */ + is = for_character ("\360\220\221\201", 4); + ASSERT (is == 0); + /* U+E0041 TAG LATIN CAPITAL LETTER A */ + is = for_character ("\363\240\201\201", 4); + ASSERT (is == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + is = for_character ("\363\240\201\241", 4); + ASSERT (is == 0); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\201\060\205\065", 4); + ASSERT (is == 0); + /* U+00B5 MICRO SIGN */ + is = for_character ("\201\060\205\070", 4); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + is = for_character ("\201\060\207\067", 4); + ASSERT (is != 0); + #endif + /* U+00DF LATIN SMALL LETTER SHARP S */ + is = for_character ("\201\060\211\070", 4); + ASSERT (is == 0); + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + is = for_character ("\250\246", 2); + ASSERT (is == 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + is = for_character ("\201\060\213\067", 4); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + is = for_character ("\201\060\221\071", 4); + ASSERT (is != 0); + #endif + /* U+0142 LATIN SMALL LETTER L WITH STROKE */ + is = for_character ("\201\060\222\060", 4); + ASSERT (is == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ + is = for_character ("\247\273", 2); + ASSERT (is != 0); + #endif + /* U+0449 CYRILLIC SMALL LETTER SHCHA */ + is = for_character ("\247\353", 2); + ASSERT (is == 0); + /* U+05D5 HEBREW LETTER VAV */ + is = for_character ("\201\060\371\067", 4); + ASSERT (is == 0); + /* U+3073 HIRAGANA LETTER BI */ + is = for_character ("\244\323", 2); + ASSERT (is == 0); + /* U+3162 HANGUL LETTER YI */ + is = for_character ("\201\071\256\062", 4); + ASSERT (is == 0); + #if !defined __DragonFly__ + /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ + is = for_character ("\243\307", 2); + ASSERT (is != 0); + #endif + /* U+FFDB HALFWIDTH HANGUL LETTER YI */ + is = for_character ("\204\061\241\071", 4); + ASSERT (is == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+10419 DESERET CAPITAL LETTER EF */ + is = for_character ("\220\060\351\071", 4); + ASSERT (is != 0); + #endif + /* U+10441 DESERET SMALL LETTER EF */ + is = for_character ("\220\060\355\071", 4); + ASSERT (is == 0); + /* U+E0041 TAG LATIN CAPITAL LETTER A */ + is = for_character ("\323\066\234\063", 4); + ASSERT (is == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + is = for_character ("\323\066\237\065", 4); + ASSERT (is == 0); + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32isupper.sh b/tests/test-c32isupper.sh new file mode 100755 index 00000000..ea3efcb8 --- /dev/null +++ b/tests/test-c32isupper.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32isupper${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isupper${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32isupper${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32isupper${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32isupper${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32isupper${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32isxdigit.c b/tests/test-c32isxdigit.c new file mode 100644 index 00000000..0c266f47 --- /dev/null +++ b/tests/test-c32isxdigit.c @@ -0,0 +1,262 @@ +/* Test of c32isxdigit() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isxdigit, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isxdigit for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + return c32isxdigit (wc); +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = c32isxdigit (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + ISO C 99 sections 7.25.2.1.12 and 6.4.4.1 specify that the hexadecimal + digits include only the ASCII 0 ... 9 A ... F a ... f characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\262", 1); + ASSERT (is == 0); + /* U+00B3 SUPERSCRIPT THREE */ + is = for_character ("\263", 1); + ASSERT (is == 0); + /* U+00B9 SUPERSCRIPT ONE */ + is = for_character ("\271", 1); + ASSERT (is == 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is == 0); + /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ + is = for_character ("\243\301", 2); + ASSERT (is == 0); + /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ + is = for_character ("\243\341", 2); + ASSERT (is == 0); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\302\262", 2); + ASSERT (is == 0); + /* U+00B3 SUPERSCRIPT THREE */ + is = for_character ("\302\263", 2); + ASSERT (is == 0); + /* U+00B9 SUPERSCRIPT ONE */ + is = for_character ("\302\271", 2); + ASSERT (is == 0); + /* U+0663 ARABIC-INDIC DIGIT THREE */ + is = for_character ("\331\243", 2); + ASSERT (is == 0); + /* U+2070 SUPERSCRIPT ZERO */ + is = for_character ("\342\201\260", 3); + ASSERT (is == 0); + /* U+2079 SUPERSCRIPT NINE */ + is = for_character ("\342\201\271", 3); + ASSERT (is == 0); + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\357\274\221", 3); + ASSERT (is == 0); + /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ + is = for_character ("\357\274\241", 3); + ASSERT (is == 0); + /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ + is = for_character ("\357\275\201", 3); + ASSERT (is == 0); + /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ + is = for_character ("\360\235\237\221", 4); + ASSERT (is == 0); + /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ + is = for_character ("\360\235\237\233", 4); + ASSERT (is == 0); + /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ + is = for_character ("\360\235\237\245", 4); + ASSERT (is == 0); + /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ + is = for_character ("\360\235\237\257", 4); + ASSERT (is == 0); + /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ + is = for_character ("\360\235\237\271", 4); + ASSERT (is == 0); + /* U+E0033 TAG DIGIT THREE */ + is = for_character ("\363\240\200\263", 4); + ASSERT (is == 0); + /* U+E0041 TAG LATIN CAPITAL LETTER A */ + is = for_character ("\363\240\201\201", 4); + ASSERT (is == 0); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+00B2 SUPERSCRIPT TWO */ + is = for_character ("\201\060\205\065", 4); + ASSERT (is == 0); + /* U+00B3 SUPERSCRIPT THREE */ + is = for_character ("\201\060\205\066", 4); + ASSERT (is == 0); + /* U+00B9 SUPERSCRIPT ONE */ + is = for_character ("\201\060\206\061", 4); + ASSERT (is == 0); + /* U+0663 ARABIC-INDIC DIGIT THREE */ + is = for_character ("\201\061\211\071", 4); + ASSERT (is == 0); + /* U+2070 SUPERSCRIPT ZERO */ + is = for_character ("\201\066\255\062", 4); + ASSERT (is == 0); + /* U+2079 SUPERSCRIPT NINE */ + is = for_character ("\201\066\256\061", 4); + ASSERT (is == 0); + /* U+FF11 FULLWIDTH DIGIT ONE */ + is = for_character ("\243\261", 2); + ASSERT (is == 0); + /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ + is = for_character ("\243\301", 2); + ASSERT (is == 0); + /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ + is = for_character ("\243\341", 2); + ASSERT (is == 0); + /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ + is = for_character ("\224\063\353\071", 4); + ASSERT (is == 0); + /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ + is = for_character ("\224\063\354\071", 4); + ASSERT (is == 0); + /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ + is = for_character ("\224\063\355\071", 4); + ASSERT (is == 0); + /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ + is = for_character ("\224\063\356\071", 4); + ASSERT (is == 0); + /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ + is = for_character ("\224\063\357\071", 4); + ASSERT (is == 0); + /* U+E0033 TAG DIGIT THREE */ + is = for_character ("\323\066\232\071", 4); + ASSERT (is == 0); + /* U+E0041 TAG LATIN CAPITAL LETTER A */ + is = for_character ("\323\066\234\063", 4); + ASSERT (is == 0); + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32isxdigit.sh b/tests/test-c32isxdigit.sh new file mode 100755 index 00000000..48f8efa7 --- /dev/null +++ b/tests/test-c32isxdigit.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32isxdigit${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isxdigit${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32isxdigit${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32isxdigit${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32isxdigit${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32isxdigit${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32rtomb-w32-2.sh b/tests/test-c32rtomb-w32-2.sh new file mode 100755 index 00000000..e797d0e5 --- /dev/null +++ b/tests/test-c32rtomb-w32-2.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP1252 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} French_France 1252 diff --git a/tests/test-c32rtomb-w32-3.sh b/tests/test-c32rtomb-w32-3.sh new file mode 100755 index 00000000..1b63d472 --- /dev/null +++ b/tests/test-c32rtomb-w32-3.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP1256 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 diff --git a/tests/test-c32rtomb-w32-4.sh b/tests/test-c32rtomb-w32-4.sh new file mode 100755 index 00000000..3c0f3db4 --- /dev/null +++ b/tests/test-c32rtomb-w32-4.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test some UTF-8 locales. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 diff --git a/tests/test-c32rtomb-w32-5.sh b/tests/test-c32rtomb-w32-5.sh new file mode 100755 index 00000000..ff59a872 --- /dev/null +++ b/tests/test-c32rtomb-w32-5.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP932 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} Japanese_Japan 932 diff --git a/tests/test-c32rtomb-w32-6.sh b/tests/test-c32rtomb-w32-6.sh new file mode 100755 index 00000000..3cf34065 --- /dev/null +++ b/tests/test-c32rtomb-w32-6.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP950 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_Taiwan 950 diff --git a/tests/test-c32rtomb-w32-7.sh b/tests/test-c32rtomb-w32-7.sh new file mode 100755 index 00000000..2174c0b5 --- /dev/null +++ b/tests/test-c32rtomb-w32-7.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP936 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_China 936 diff --git a/tests/test-c32rtomb-w32-8.sh b/tests/test-c32rtomb-w32-8.sh new file mode 100755 index 00000000..b7e77b28 --- /dev/null +++ b/tests/test-c32rtomb-w32-8.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a GB18030 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_China 54936 diff --git a/tests/test-c32rtomb-w32.c b/tests/test-c32rtomb-w32.c new file mode 100644 index 00000000..3e089d11 --- /dev/null +++ b/tests/test-c32rtomb-w32.c @@ -0,0 +1,349 @@ +/* Test of conversion of wide character to multibyte character. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "localcharset.h" +#include "macros.h" + +#if defined _WIN32 && !defined __CYGWIN__ + +static int +test_one_locale (const char *name, int codepage) +{ + char buf[64]; + size_t ret; + +# if 1 + /* Portable code to set the locale. */ + { + char name_with_codepage[1024]; + + sprintf (name_with_codepage, "%s.%d", name, codepage); + + /* Set the locale. */ + if (setlocale (LC_ALL, name_with_codepage) == NULL) + return 77; + } +# else + /* Hacky way to set a locale.codepage combination that setlocale() refuses + to set. */ + { + /* Codepage of the current locale, set with setlocale(). + Not necessarily the same as GetACP(). */ + extern __declspec(dllimport) unsigned int __lc_codepage; + + /* Set the locale. */ + if (setlocale (LC_ALL, name) == NULL) + return 77; + + /* Clobber the codepage and MB_CUR_MAX, both set by setlocale(). */ + __lc_codepage = codepage; + switch (codepage) + { + case 1252: + case 1256: + MB_CUR_MAX = 1; + break; + case 932: + case 950: + case 936: + MB_CUR_MAX = 2; + break; + case 54936: + case 65001: + MB_CUR_MAX = 4; + break; + } + + /* Test whether the codepage is really available. */ + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, " ", 1, &state) == (size_t)(-1)) + return 77; + } + } +# endif + + /* Test NUL character. */ + { + buf[0] = 'x'; + ret = c32rtomb (buf, 0, NULL); + ASSERT (ret == 1); + ASSERT (buf[0] == '\0'); + } + + /* Test single bytes. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + ret = c32rtomb (buf, btoc32 (c), NULL); + ASSERT (ret == 1); + ASSERT (buf[0] == (char) c); + break; + } + } + + /* Test special calling convention, passing a NULL pointer. */ + { + ret = c32rtomb (NULL, '\0', NULL); + ASSERT (ret == 1); + ret = c32rtomb (NULL, btoc32 ('x'), NULL); + ASSERT (ret == 1); + } + + switch (codepage) + { + case 1252: + /* Locale encoding is CP1252, an extension of ISO-8859-1. */ + { + /* Convert "B\374\337er": "Büßer" */ + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x00FC, NULL); + ASSERT (ret == 1); + ASSERT (memcmp (buf, "\374", 1) == 0); + ASSERT (buf[1] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x00DF, NULL); + ASSERT (ret == 1); + ASSERT (memcmp (buf, "\337", 1) == 0); + ASSERT (buf[1] == 'x'); + } + return 0; + + case 1256: + /* Locale encoding is CP1256, not the same as ISO-8859-6. */ + { + /* Convert "x\302\341\346y": "xآلوy" */ + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x0622, NULL); + ASSERT (ret == 1); + ASSERT (memcmp (buf, "\302", 1) == 0); + ASSERT (buf[1] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x0644, NULL); + ASSERT (ret == 1); + ASSERT (memcmp (buf, "\341", 1) == 0); + ASSERT (buf[1] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x0648, NULL); + ASSERT (ret == 1); + ASSERT (memcmp (buf, "\346", 1) == 0); + ASSERT (buf[1] == 'x'); + } + return 0; + + case 65001: + /* Locale encoding is CP65001 = UTF-8. */ + if (strcmp (locale_charset (), "UTF-8") != 0) + return 77; + { + /* Convert "s\303\274\303\237\360\237\230\213!"; "süß😋!" */ + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x00FC, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\303\274", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x00DF, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\303\237", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x1F60B, NULL); + ASSERT (ret == 4); + ASSERT (memcmp (buf, "\360\237\230\213", 4) == 0); + ASSERT (buf[4] == 'x'); + } + return 0; + + case 932: + /* Locale encoding is CP932, similar to Shift_JIS. */ + { + /* Convert "<\223\372\226\173\214\352>": "<日本語>" */ + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x65E5, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\223\372", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x672C, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\226\173", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x8A9E, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\214\352", 2) == 0); + ASSERT (buf[2] == 'x'); + } + return 0; + + case 950: + /* Locale encoding is CP950, similar to Big5. */ + { + /* Convert "<\244\351\245\273\273\171>": "<日本語>" */ + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x65E5, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\244\351", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x672C, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\245\273", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x8A9E, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\273\171", 2) == 0); + ASSERT (buf[2] == 'x'); + } + return 0; + + case 936: + /* Locale encoding is CP936 = GBK, an extension of GB2312. */ + { + /* Convert "<\310\325\261\276\325\132>": "<日本語>" */ + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x65E5, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\310\325", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x672C, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\261\276", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x8A9E, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\325\132", 2) == 0); + ASSERT (buf[2] == 'x'); + } + return 0; + + case 54936: + /* Locale encoding is CP54936 = GB18030. */ + if (strcmp (locale_charset (), "GB18030") != 0) + return 77; + { + /* Convert "s\250\271\201\060\211\070\224\071\375\067!"; "süß😋!" */ + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x00FC, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\250\271", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x00DF, NULL); + ASSERT (ret == 4); + ASSERT (memcmp (buf, "\201\060\211\070", 4) == 0); + ASSERT (buf[4] == 'x'); + + memset (buf, 'x', 8); + ret = c32rtomb (buf, 0x1F60B, NULL); + ASSERT (ret == 4); + ASSERT (memcmp (buf, "\224\071\375\067", 4) == 0); + ASSERT (buf[4] == 'x'); + } + return 0; + + default: + return 1; + } +} + +int +main (int argc, char *argv[]) +{ + int codepage = atoi (argv[argc - 1]); + int result; + int i; + + result = 77; + for (i = 1; i < argc - 1; i++) + { + int ret = test_one_locale (argv[i], codepage); + + if (ret != 77) + result = ret; + } + + if (result == 77) + { + fprintf (stderr, "Skipping test: found no locale with codepage %d\n", + codepage); + } + return result; +} + +#else + +int +main (int argc, char *argv[]) +{ + fputs ("Skipping test: not a native Windows system\n", stderr); + return 77; +} + +#endif diff --git a/tests/test-c32rtomb.c b/tests/test-c32rtomb.c new file mode 100644 index 00000000..c33d08d3 --- /dev/null +++ b/tests/test-c32rtomb.c @@ -0,0 +1,174 @@ +/* Test of conversion of wide character to multibyte character. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32rtomb, size_t, (char *, char32_t, mbstate_t *)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> + +#include "macros.h" + +/* Check the multibyte character s[0..n-1]. */ +static void +check_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + char buf[64]; + int iret; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + iret = mbrtoc32 (&wc, s, n, &state); + ASSERT (iret == n); + + ret = c32rtomb (buf, wc, NULL); + ASSERT (ret == n); + ASSERT (memcmp (buf, s, n) == 0); + + /* Test special calling convention, passing a NULL pointer. */ + ret = c32rtomb (NULL, wc, NULL); + ASSERT (ret == 1); +} + +int +main (int argc, char *argv[]) +{ + char buf[64]; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test NUL character. */ + { + buf[0] = 'x'; + ret = c32rtomb (buf, 0, NULL); + ASSERT (ret == 1); + ASSERT (buf[0] == '\0'); + } + + /* Test single bytes. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + ret = c32rtomb (buf, btoc32 (c), NULL); + ASSERT (ret == 1); + ASSERT (buf[0] == (char) c); + break; + } + } + + /* Test special calling convention, passing a NULL pointer. */ + { + ret = c32rtomb (NULL, '\0', NULL); + ASSERT (ret == 1); + ret = c32rtomb (NULL, btoc32 ('x'), NULL); + ASSERT (ret == 1); + } + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* C locale; tested above. */ + return 0; + + case '2': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + const char input[] = "B\374\337er"; /* "Büßer" */ + + check_character (input + 1, 1); + check_character (input + 2, 1); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + const char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ + + check_character (input + 1, 2); + check_character (input + 3, 2); + check_character (input + 5, 4); + } + return 0; + + case '4': + /* Locale encoding is EUC-JP. */ + { + const char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ + + check_character (input + 1, 2); + check_character (input + 3, 2); + check_character (input + 5, 2); + } + return 0; + + case '5': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + const char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ + + check_character (input + 1, 2); + check_character (input + 3, 4); + check_character (input + 7, 4); + } + return 0; + } + + return 1; +} diff --git a/tests/test-c32rtomb.sh b/tests/test-c32rtomb.sh new file mode 100755 index 00000000..e5236c97 --- /dev/null +++ b/tests/test-c32rtomb.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32rtomb${EXEEXT} 1 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32rtomb${EXEEXT} 1 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32rtomb${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32rtomb${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32rtomb${EXEEXT} 4 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32rtomb${EXEEXT} 5 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32tolower.c b/tests/test-c32tolower.c new file mode 100644 index 00000000..681191b4 --- /dev/null +++ b/tests/test-c32tolower.c @@ -0,0 +1,440 @@ +/* Test of c32tolower() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32tolower, wint_t, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Representation of a multibyte character. */ +#define MBCHAR_BUF_SIZE 6 +struct multibyte +{ + size_t nbytes; /* number of bytes of current character, > 0 */ + char buf[MBCHAR_BUF_SIZE]; /* room for the bytes */ +}; + +/* Returns the value of c32tolower for the multibyte character s[0..n-1], + as a multibyte character. */ +static struct multibyte +for_character (const char *s, size_t n) +{ + mbstate_t state; + char32_t wc; + size_t ret; + struct multibyte result; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, s, n, &state); + ASSERT (ret == n); + + wc = c32tolower (wc); + ASSERT (wc != WEOF); + + memset (&state, '\0', sizeof (mbstate_t)); + ret = c32rtomb (result.buf, wc, &state); + ASSERT (ret != 0); + if (ret == (size_t)(-1)) + /* wc cannot be converted back to multibyte. */ + result.nbytes = 0; + else + { + ASSERT (ret <= MBCHAR_BUF_SIZE); + result.nbytes = ret; + } + return result; +} + +int +main (int argc, char *argv[]) +{ + wint_t wc; + struct multibyte mb; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + wc = c32tolower (WEOF); + ASSERT (wc == WEOF); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + that + - in all locales, the uppercase characters include the A ... Z + characters, and the corresponding characters a ... z (if not in a + Turkish locale) are lowercase, + - in the "POSIX" locale (which is usually the same as the "C" locale), + the uppercase characters include only the ASCII A ... Z characters, + and the corresponding characters a ... z are lowercase. + */ +#if defined __NetBSD__ + /* towlower is broken in the zh_CN.GB18030 locale on NetBSD 9.0. + See <https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=57339>. */ + if (!(argc > 1 && argv[1][0] == '4')) +#endif + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + mb = for_character (buf, 1); + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + ASSERT (mb.nbytes == 1); + ASSERT ((unsigned char) mb.buf[0] == (unsigned char) c - 'A' + 'a'); + break; + default: + ASSERT (mb.nbytes == 1); + ASSERT ((unsigned char) mb.buf[0] == c); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + return 0; + + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + mb = for_character ("\262", 1); + ASSERT (mb.nbytes == 1); + ASSERT (memcmp (mb.buf, "\262", 1) == 0); + /* U+00B5 MICRO SIGN */ + mb = for_character ("\265", 1); + ASSERT (mb.nbytes == 1); + ASSERT (memcmp (mb.buf, "\265", 1) == 0); + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + mb = for_character ("\311", 1); + ASSERT (mb.nbytes == 1); + ASSERT (memcmp (mb.buf, "\351", 1) == 0); + /* U+00DF LATIN SMALL LETTER SHARP S */ + mb = for_character ("\337", 1); + ASSERT (mb.nbytes == 1); + ASSERT (memcmp (mb.buf, "\337", 1) == 0); + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + mb = for_character ("\351", 1); + ASSERT (mb.nbytes == 1); + ASSERT (memcmp (mb.buf, "\351", 1) == 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + mb = for_character ("\377", 1); + ASSERT (mb.nbytes == 1); + ASSERT (memcmp (mb.buf, "\377", 1) == 0); + } + return 0; + + case '2': + /* Locale encoding is EUC-JP. */ + { + #if !((defined __APPLE__ && defined __MACH__) || defined __DragonFly__) + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + mb = for_character ("\217\252\261", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\217\253\261", 3) == 0); + #endif + /* U+00DF LATIN SMALL LETTER SHARP S */ + mb = for_character ("\217\251\316", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\217\251\316", 3) == 0); + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + mb = for_character ("\217\253\261", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\217\253\261", 3) == 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + mb = for_character ("\217\253\363", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\217\253\363", 3) == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __DragonFly__) + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + mb = for_character ("\217\251\250", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\217\251\310", 3) == 0); + #endif + /* U+0142 LATIN SMALL LETTER L WITH STROKE */ + mb = for_character ("\217\251\310", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\217\251\310", 3) == 0); + #if !defined __DragonFly__ + /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ + mb = for_character ("\247\273", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); + #endif + /* U+0449 CYRILLIC SMALL LETTER SHCHA */ + mb = for_character ("\247\353", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); + /* U+3073 HIRAGANA LETTER BI */ + mb = for_character ("\244\323", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\244\323", 2) == 0); + #if !defined __DragonFly__ + /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ + mb = for_character ("\243\307", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); + #endif + /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ + mb = for_character ("\243\347", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + /* U+00B2 SUPERSCRIPT TWO */ + mb = for_character ("\302\262", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\302\262", 2) == 0); + /* U+00B5 MICRO SIGN */ + mb = for_character ("\302\265", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\302\265", 2) == 0); + #if !(defined _WIN32 && !defined __CYGWIN__) + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + mb = for_character ("\303\211", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\303\251", 2) == 0); + #endif + /* U+00DF LATIN SMALL LETTER SHARP S */ + mb = for_character ("\303\237", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\303\237", 2) == 0); + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + mb = for_character ("\303\251", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\303\251", 2) == 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + mb = for_character ("\303\277", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\303\277", 2) == 0); + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + mb = for_character ("\305\201", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\305\202", 2) == 0); + /* U+0142 LATIN SMALL LETTER L WITH STROKE */ + mb = for_character ("\305\202", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\305\202", 2) == 0); + /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ + mb = for_character ("\320\251", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\321\211", 2) == 0); + /* U+0449 CYRILLIC SMALL LETTER SHCHA */ + mb = for_character ("\321\211", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\321\211", 2) == 0); + /* U+05D5 HEBREW LETTER VAV */ + mb = for_character ("\327\225", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\327\225", 2) == 0); + /* U+3073 HIRAGANA LETTER BI */ + mb = for_character ("\343\201\263", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\343\201\263", 3) == 0); + /* U+3162 HANGUL LETTER YI */ + mb = for_character ("\343\205\242", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\343\205\242", 3) == 0); + /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ + mb = for_character ("\357\274\247", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\357\275\207", 3) == 0); + /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ + mb = for_character ("\357\275\207", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\357\275\207", 3) == 0); + /* U+FFDB HALFWIDTH HANGUL LETTER YI */ + mb = for_character ("\357\277\233", 3); + ASSERT (mb.nbytes == 3); + ASSERT (memcmp (mb.buf, "\357\277\233", 3) == 0); + #if !(defined __DragonFly__ || defined __sun) + /* U+10419 DESERET CAPITAL LETTER EF */ + mb = for_character ("\360\220\220\231", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\360\220\221\201", 4) == 0); + #endif + /* U+10441 DESERET SMALL LETTER EF */ + mb = for_character ("\360\220\221\201", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\360\220\221\201", 4) == 0); + /* U+E0041 TAG LATIN CAPITAL LETTER A */ + mb = for_character ("\363\240\201\201", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\363\240\201\201", 4) == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + mb = for_character ("\363\240\201\241", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\363\240\201\241", 4) == 0); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + /* U+00B2 SUPERSCRIPT TWO */ + mb = for_character ("\201\060\205\065", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\201\060\205\065", 4) == 0); + /* U+00B5 MICRO SIGN */ + mb = for_character ("\201\060\205\070", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\201\060\205\070", 4) == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ + mb = for_character ("\201\060\207\067", 4); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\250\246", 2) == 0); + #endif + /* U+00DF LATIN SMALL LETTER SHARP S */ + mb = for_character ("\201\060\211\070", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\201\060\211\070", 4) == 0); + /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ + mb = for_character ("\250\246", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\250\246", 2) == 0); + /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + mb = for_character ("\201\060\213\067", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\201\060\213\067", 4) == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) + /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ + mb = for_character ("\201\060\221\071", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\201\060\222\060", 4) == 0); + #endif + /* U+0142 LATIN SMALL LETTER L WITH STROKE */ + mb = for_character ("\201\060\222\060", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\201\060\222\060", 4) == 0); + #if !(defined __FreeBSD__ || defined __DragonFly__) + /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ + mb = for_character ("\247\273", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); + #endif + /* U+0449 CYRILLIC SMALL LETTER SHCHA */ + mb = for_character ("\247\353", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); + /* U+05D5 HEBREW LETTER VAV */ + mb = for_character ("\201\060\371\067", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\201\060\371\067", 4) == 0); + /* U+3073 HIRAGANA LETTER BI */ + mb = for_character ("\244\323", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\244\323", 2) == 0); + /* U+3162 HANGUL LETTER YI */ + mb = for_character ("\201\071\256\062", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\201\071\256\062", 4) == 0); + #if !defined __DragonFly__ + /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ + mb = for_character ("\243\307", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); + #endif + /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ + mb = for_character ("\243\347", 2); + ASSERT (mb.nbytes == 2); + ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); + /* U+FFDB HALFWIDTH HANGUL LETTER YI */ + mb = for_character ("\204\061\241\071", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\204\061\241\071", 4) == 0); + #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) + /* U+10419 DESERET CAPITAL LETTER EF */ + mb = for_character ("\220\060\351\071", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\220\060\355\071", 4) == 0); + #endif + /* U+10441 DESERET SMALL LETTER EF */ + mb = for_character ("\220\060\355\071", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\220\060\355\071", 4) == 0); + /* U+E0041 TAG LATIN CAPITAL LETTER A */ + mb = for_character ("\323\066\234\063", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\323\066\234\063", 4) == 0); + /* U+E0061 TAG LATIN SMALL LETTER A */ + mb = for_character ("\323\066\237\065", 4); + ASSERT (mb.nbytes == 4); + ASSERT (memcmp (mb.buf, "\323\066\237\065", 4) == 0); + } + return 0; + + } + + return 1; +} diff --git a/tests/test-c32tolower.sh b/tests/test-c32tolower.sh new file mode 100755 index 00000000..02f3e5f6 --- /dev/null +++ b/tests/test-c32tolower.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# Allow distinguishing the various invocations in the .log file. +set -x + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-c32tolower${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32tolower${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ${CHECKER} ./test-c32tolower${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ${CHECKER} ./test-c32tolower${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ${CHECKER} ./test-c32tolower${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ${CHECKER} ./test-c32tolower${EXEEXT} 4 + case $? in + 0 | 77) ;; + *) exit 1 ;; + esac +fi + +exit 0 diff --git a/tests/test-c32width.c b/tests/test-c32width.c new file mode 100644 index 00000000..4ebc1afa --- /dev/null +++ b/tests/test-c32width.c @@ -0,0 +1,104 @@ +/* Test of c32width() function. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32width, int, (char32_t)); + +#include <locale.h> +#include <string.h> + +#include "c-ctype.h" +#include "localcharset.h" +#include "macros.h" + +int +main () +{ + char32_t wc; + +#if !GNULIB_WCHAR_SINGLE_LOCALE +# ifdef C_CTYPE_ASCII + /* Test width of ASCII characters. */ + for (wc = 0x20; wc < 0x7F; wc++) + ASSERT (c32width (wc) == 1); +# endif +#endif + + /* Switch to an UTF-8 locale. */ + if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL + /* Check whether it's really an UTF-8 locale. + On OpenBSD 4.0, the setlocale call succeeds only for the LC_CTYPE + category and therefore returns "C/fr_FR.UTF-8/C/C/C/C", but the + LC_CTYPE category is effectively set to an ASCII LC_CTYPE category; + in particular, locale_charset() returns "ASCII". */ + && strcmp (locale_charset (), "UTF-8") == 0) + { + /* Test width of ASCII characters. */ + for (wc = 0x20; wc < 0x7F; wc++) + ASSERT (c32width (wc) == 1); + + /* Test width of some non-spacing characters. */ + ASSERT (c32width (0x0301) == 0); + ASSERT (c32width (0x05B0) == 0); + + /* Test width of some format control characters. */ + ASSERT (c32width (0x200E) <= 0); + ASSERT (c32width (0x2060) <= 0); + ASSERT (c32width (0xE0001) <= 0); + ASSERT (c32width (0xE0044) <= 0); + + /* Test width of some zero width characters. */ + /* While it is desirable that U+200B, U+200C, U+200D have width 0, + because this makes wcswidth work better on strings that contain these + characters, it is acceptable if an implementation treats these + characters like control characters. */ + ASSERT (c32width (0x200B) <= 0); + ASSERT (c32width (0xFEFF) <= 0); + + /* Test width of some math symbols. + U+2202 is marked as having ambiguous width (A) in EastAsianWidth.txt + (see <https://www.unicode.org/Public/12.0.0/ucd/EastAsianWidth.txt>). + The Unicode Standard Annex 11 + <https://www.unicode.org/reports/tr11/tr11-36.html> + says + "Ambiguous characters behave like wide or narrow characters + depending on the context (language tag, script identification, + associated font, source of data, or explicit markup; all can + provide the context). If the context cannot be established + reliably, they should be treated as narrow characters by default." + For c32width(), the only available context information is the locale. + "fr_FR.UTF-8" is a Western locale, not an East Asian locale, therefore + U+2202 should be treated like a narrow character. */ + ASSERT (c32width (0x2202) == 1); + + /* Test width of some CJK characters. */ + ASSERT (c32width (0x3000) == 2); + ASSERT (c32width (0xB250) == 2); + ASSERT (c32width (0xFF1A) == 2); + #if !(defined __FreeBSD__ && __FreeBSD__ < 13 && !defined __GLIBC__) + ASSERT (c32width (0x20369) == 2); + ASSERT (c32width (0x2F876) == 2); + #endif + } + + return 0; +} diff --git a/tests/test-calloc-gnu.c b/tests/test-calloc-gnu.c index 4a7b7745..cf8c564a 100644 --- a/tests/test-calloc-gnu.c +++ b/tests/test-calloc-gnu.c @@ -1,5 +1,5 @@ /* Test of calloc function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -63,7 +63,7 @@ main () ASSERT (p == NULL); ASSERT (errno == ENOMEM); - p = calloc (SIZE_MAX / n + 1, identity (n)); + p = calloc (SIZE_MAX / n + 1, identity (n)); ASSERT (p == NULL); ASSERT (errno == ENOMEM); } diff --git a/tests/test-cloexec.c b/tests/test-cloexec.c index 6069e537..76480bb6 100644 --- a/tests/test-cloexec.c +++ b/tests/test-cloexec.c @@ -1,5 +1,5 @@ /* Test duplicating non-inheritable file descriptors. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -62,8 +62,12 @@ is_inheritable (int fd) } #if !O_BINARY -# define set_binary_mode(f,m) zero () -static int zero (void) { return 0; } +# define set_binary_mode my_set_binary_mode +static int +set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) +{ + return 0; +} #endif /* Return non-zero if FD is open in the given MODE, which is either diff --git a/tests/test-close.c b/tests/test-close.c index db25aab0..47b3aa45 100644 --- a/tests/test-close.c +++ b/tests/test-close.c @@ -1,5 +1,5 @@ /* Test closing a file or socket. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-connect.c b/tests/test-connect.c index 2a93d01f..ea4b66ed 100644 --- a/tests/test-connect.c +++ b/tests/test-connect.c @@ -1,5 +1,5 @@ /* Test connecting a client socket. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-ctype.c b/tests/test-ctype.c index 93c4e32b..d7a9e415 100644 --- a/tests/test-ctype.c +++ b/tests/test-ctype.c @@ -1,5 +1,5 @@ /* Test of <ctype.h> substitute. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-dup2.c b/tests/test-dup2.c index e4ec1c25..55f31940 100644 --- a/tests/test-dup2.c +++ b/tests/test-dup2.c @@ -1,5 +1,5 @@ /* Test duplicating file descriptors. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,6 +50,12 @@ SIGNATURE_CHECK (dup2, int, (int, int)); #include "macros.h" +/* Tell GCC not to warn about the specific edge cases tested here. */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +# pragma GCC diagnostic ignored "-Wanalyzer-fd-use-without-check" +#endif + /* Return non-zero if FD is open. */ static int is_open (int fd) @@ -92,8 +98,12 @@ is_inheritable (int fd) #endif /* GNULIB_TEST_CLOEXEC */ #if !O_BINARY -# define set_binary_mode(f,m) zero () -static int zero (void) { return 0; } +# define set_binary_mode my_set_binary_mode +static int +set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) +{ + return 0; +} #endif /* Return non-zero if FD is open in the given MODE, which is either diff --git a/tests/test-environ.c b/tests/test-environ.c index 6242205f..fdd944f6 100644 --- a/tests/test-environ.c +++ b/tests/test-environ.c @@ -1,5 +1,5 @@ /* Test of environ variable. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-errno.c b/tests/test-errno.c index bbfd5da6..99600add 100644 --- a/tests/test-errno.c +++ b/tests/test-errno.c @@ -1,5 +1,5 @@ /* Test of <errno.h> substitute. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-error.c b/tests/test-error.c new file mode 100644 index 00000000..02704d7c --- /dev/null +++ b/tests/test-error.c @@ -0,0 +1,89 @@ +/* Test of error.h functions. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023. */ + +#include <config.h> + +/* Specification. */ +#include <error.h> + +#include <errno.h> + +#include "macros.h" + +/* Custom function to not show the program name in error messages. */ +static void +print_no_progname (void) +{ +} + +int +main () +{ + /* Test error() function with zero STATUS and zero ERRNUM. */ + error (0, 0, "bummer"); + /* With format string arguments. */ + errno = EINVAL; /* should be ignored */ + error (0, 0, "Zonk %d%d%d is too large", 1, 2, 3); + /* With non-ASCII characters. */ + error (0, 0, "Pokémon started"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 3); + + /* Test error_at_line() function with zero STATUS and zero ERRNUM. */ + error_at_line (0, 0, "d1/foo.c", 10, "invalid blub"); + error_at_line (0, 0, "d1/foo.c", 10, "invalid blarn"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 5); + + /* Test error_one_per_line. */ + error_one_per_line = 1; + error_at_line (0, 0, "d1/foo.c", 10, "unsupported glink"); + /* Another line number. */ + error_at_line (0, 0, "d1/foo.c", 13, "invalid brump"); + /* Another file name. */ + error_at_line (0, 0, "d2/foo.c", 13, "unsupported flinge"); + /* Same file name and same line number => message not shown. */ + error_at_line (0, 0, "d2/foo.c", 13, "invalid bark"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 8); + error_one_per_line = 0; + + /* Test error_print_progname. */ + error_print_progname = print_no_progname; + error (0, 0, "hammer"); + error (0, 0, "boing %d%d%d is too large", 1, 2, 3); + #if 0 + /* The documentation does not describe the output if the file name is NULL. */ + error_at_line (0, 0, NULL, 42, "drummer too loud"); + #endif + error_at_line (0, 0, "d2/bar.c", 11, "bark too loud"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 11); + error_print_progname = NULL; + + /* Test error() function with nonzero ERRNUM. */ + errno = EINVAL; /* should be ignored */ + error (0, EACCES, "can't steal"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 12); + + /* Test error() function with nonzero STATUS. */ + error (4, 0, "fatal error"); + + return 0; +} diff --git a/tests/test-error.sh b/tests/test-error.sh new file mode 100755 index 00000000..d173e183 --- /dev/null +++ b/tests/test-error.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# Test of the 'error' module. + +. "${srcdir=.}/init.sh"; path_prepend_ . + +${CHECKER} test-error${EXEEXT} > out 2> err +# Verify the exit code. +case $? in + 4) ;; + *) Exit 1;; +esac + +# Normalize the stderr output on Windows platforms. +tr -d '\015' < err | sed 's,.*test-error[.ex]*:,test-error:,' > err2 || Exit 1 + +# Verify the stderr output. +compare - err2 <<\EOF || Exit 1 +test-error: bummer +test-error: Zonk 123 is too large +test-error: Pokémon started +test-error:d1/foo.c:10: invalid blub +test-error:d1/foo.c:10: invalid blarn +test-error:d1/foo.c:10: unsupported glink +test-error:d1/foo.c:13: invalid brump +test-error:d2/foo.c:13: unsupported flinge +hammer +boing 123 is too large +d2/bar.c:11: bark too loud +test-error: can't steal: Permission denied +test-error: fatal error +EOF + +# Verify the stdout output. +test -s out && Exit 1 + +Exit 0 diff --git a/tests/test-fcntl-h.c b/tests/test-fcntl-h.c index 15019792..d6331672 100644 --- a/tests/test-fcntl-h.c +++ b/tests/test-fcntl-h.c @@ -1,5 +1,5 @@ /* Test of <fcntl.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-fcntl.c b/tests/test-fcntl.c index 77ca3479..0eb24a9f 100644 --- a/tests/test-fcntl.c +++ b/tests/test-fcntl.c @@ -1,5 +1,5 @@ /* Test of fcntl(2). - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,9 +44,19 @@ SIGNATURE_CHECK (fcntl, int, (int, int, ...)); #include "binary-io.h" #include "macros.h" +/* Tell GCC not to warn about the specific edge cases tested here. */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +# pragma GCC diagnostic ignored "-Wanalyzer-va-arg-type-mismatch" +#endif + #if !O_BINARY -# define set_binary_mode(f,m) zero () -static int zero (void) { return 0; } +# define set_binary_mode my_set_binary_mode +static int +set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) +{ + return 0; +} #endif /* Return true if FD is open. */ @@ -211,7 +221,7 @@ check_flags (void) } int -main (int argc, char *argv[]) +main (int argc, _GL_UNUSED char *argv[]) { if (argc > 1) /* child process */ diff --git a/tests/test-fdopen.c b/tests/test-fdopen.c index d67beedd..e5aa6442 100644 --- a/tests/test-fdopen.c +++ b/tests/test-fdopen.c @@ -1,5 +1,5 @@ /* Test opening a stream with a file descriptor. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,9 +33,14 @@ main (void) failure, since the behavior is not well-defined on invalid file descriptors, so try fdopen 1000 times and if that's not enough to fail due to EMFILE, so be it. */ + #if defined __ANDROID__ /* fdsan */ + #define COUNT 1 + #else + #define COUNT 1000 + #endif int i; - for (i = 0; i < 1000; i++) + for (i = 0; i < COUNT; i++) { errno = 0; if (! fdopen (STDOUT_FILENO, "w")) diff --git a/tests/test-fgetc.c b/tests/test-fgetc.c index 2b289dc1..0d617980 100644 --- a/tests/test-fgetc.c +++ b/tests/test-fgetc.c @@ -1,5 +1,5 @@ /* Test of fgetc() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ SIGNATURE_CHECK (fgetc, int, (FILE *)); #include "macros.h" int -main (int argc, char **argv) +main () { const char *filename = "test-fgetc.txt"; @@ -54,6 +54,7 @@ main (int argc, char **argv) /* Test that fgetc() sets errno if someone else closes the stream fd behind the back of stdio. */ + #if !defined __ANDROID__ /* fdsan */ { FILE *fp = fopen (filename, "r"); ASSERT (fp != NULL); @@ -64,6 +65,7 @@ main (int argc, char **argv) ASSERT (ferror (fp)); fclose (fp); } + #endif /* Test that fgetc() sets errno if the stream was constructed with an invalid file descriptor. */ diff --git a/tests/test-float.c b/tests/test-float.c index 986f7da8..e9dc4609 100644 --- a/tests/test-float.c +++ b/tests/test-float.c @@ -1,5 +1,5 @@ /* Test of <float.h> substitute. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,12 +20,48 @@ #include <float.h> -#include "fpucw.h" -#include "macros.h" - /* Check that FLT_RADIX is a constant expression. */ int a[] = { FLT_RADIX }; +/* ----------------------- Check macros for 'float' ----------------------- */ + +/* Check that the FLT_* macros expand to constant expressions. */ +int fb[] = + { + FLT_MANT_DIG, FLT_MIN_EXP, FLT_MAX_EXP, + FLT_DIG, FLT_MIN_10_EXP, FLT_MAX_10_EXP + }; +float fc[] = { FLT_EPSILON, FLT_MIN, FLT_MAX }; + +/* ----------------------- Check macros for 'double' ----------------------- */ + +/* Check that the DBL_* macros expand to constant expressions. */ +int db[] = + { + DBL_MANT_DIG, DBL_MIN_EXP, DBL_MAX_EXP, + DBL_DIG, DBL_MIN_10_EXP, DBL_MAX_10_EXP + }; +double dc[] = { DBL_EPSILON, DBL_MIN, DBL_MAX }; + +/* -------------------- Check macros for 'long double' -------------------- */ + +/* Check that the LDBL_* macros expand to constant expressions. */ +int lb[] = + { + LDBL_MANT_DIG, LDBL_MIN_EXP, LDBL_MAX_EXP, + LDBL_DIG, LDBL_MIN_10_EXP, LDBL_MAX_10_EXP + }; +long double lc1 = LDBL_EPSILON; +long double lc2 = LDBL_MIN; +#if 0 /* LDBL_MAX is not a constant expression on some platforms. */ +long double lc3 = LDBL_MAX; +#endif + +/* ------------------------------------------------------------------------- */ + +#include "fpucw.h" +#include "macros.h" + #if FLT_RADIX == 2 /* Return 2^n. */ @@ -117,14 +153,6 @@ pow2l (int n) /* ----------------------- Check macros for 'float' ----------------------- */ -/* Check that the FLT_* macros expand to constant expressions. */ -int fb[] = - { - FLT_MANT_DIG, FLT_MIN_EXP, FLT_MAX_EXP, - FLT_DIG, FLT_MIN_10_EXP, FLT_MAX_10_EXP - }; -float fc[] = { FLT_EPSILON, FLT_MIN, FLT_MAX }; - static void test_float (void) { @@ -196,14 +224,6 @@ test_float (void) /* ----------------------- Check macros for 'double' ----------------------- */ -/* Check that the DBL_* macros expand to constant expressions. */ -int db[] = - { - DBL_MANT_DIG, DBL_MIN_EXP, DBL_MAX_EXP, - DBL_DIG, DBL_MIN_10_EXP, DBL_MAX_10_EXP - }; -double dc[] = { DBL_EPSILON, DBL_MIN, DBL_MAX }; - static void test_double (void) { @@ -275,18 +295,6 @@ test_double (void) /* -------------------- Check macros for 'long double' -------------------- */ -/* Check that the LDBL_* macros expand to constant expressions. */ -int lb[] = - { - LDBL_MANT_DIG, LDBL_MIN_EXP, LDBL_MAX_EXP, - LDBL_DIG, LDBL_MIN_10_EXP, LDBL_MAX_10_EXP - }; -long double lc1 = LDBL_EPSILON; -long double lc2 = LDBL_MIN; -#if 0 /* LDBL_MAX is not a constant expression on some platforms. */ -long double lc3 = LDBL_MAX; -#endif - static void test_long_double (void) { diff --git a/tests/test-fputc.c b/tests/test-fputc.c index 34f4cf53..0d48a92f 100644 --- a/tests/test-fputc.c +++ b/tests/test-fputc.c @@ -1,5 +1,5 @@ /* Test of fputc() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ SIGNATURE_CHECK (fputc, int, (int, FILE *)); #include "macros.h" int -main (int argc, char **argv) +main () { const char *filename = "test-fputc.txt"; @@ -45,6 +45,7 @@ main (int argc, char **argv) /* Test that fputc() on an unbuffered stream sets errno if someone else closes the stream fd behind the back of stdio. */ + #if !defined __ANDROID__ /* fdsan */ { FILE *fp = fopen (filename, "w"); ASSERT (fp != NULL); @@ -56,6 +57,7 @@ main (int argc, char **argv) ASSERT (ferror (fp)); fclose (fp); } + #endif /* Test that fputc() on an unbuffered stream sets errno if the stream was constructed with an invalid file descriptor. */ diff --git a/tests/test-fread.c b/tests/test-fread.c index e85ce052..ac6bdecf 100644 --- a/tests/test-fread.c +++ b/tests/test-fread.c @@ -1,5 +1,5 @@ /* Test of fread() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ SIGNATURE_CHECK (fread, size_t, (void *, size_t, size_t, FILE *)); #include "macros.h" int -main (int argc, char **argv) +main () { const char *filename = "test-fread.txt"; @@ -54,6 +54,7 @@ main (int argc, char **argv) /* Test that fread() sets errno if someone else closes the stream fd behind the back of stdio. */ + #if !defined __ANDROID__ /* fdsan */ { FILE *fp = fopen (filename, "r"); char buf[5]; @@ -65,6 +66,7 @@ main (int argc, char **argv) ASSERT (ferror (fp)); fclose (fp); } + #endif /* Test that fread() sets errno if the stream was constructed with an invalid file descriptor. */ diff --git a/tests/test-free.c b/tests/test-free.c index 9248712b..703c550e 100644 --- a/tests/test-free.c +++ b/tests/test-free.c @@ -1,5 +1,5 @@ /* Test of free() function. - Copyright (C) 2020-2022 Free Software Foundation, Inc. + Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-frexp.c b/tests/test-frexp.c index db7d2079..3d6bc300 100644 --- a/tests/test-frexp.c +++ b/tests/test-frexp.c @@ -1,5 +1,5 @@ /* Test of splitting a double into fraction and mantissa. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-frexp.h b/tests/test-frexp.h index cdc6ea3e..439c44ef 100644 --- a/tests/test-frexp.h +++ b/tests/test-frexp.h @@ -1,5 +1,5 @@ /* Test of splitting a double into fraction and mantissa. - Copyright (C) 2012-2022 Free Software Foundation, Inc. + Copyright (C) 2012-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-frexpl.c b/tests/test-frexpl.c index d469234d..ea4e9728 100644 --- a/tests/test-frexpl.c +++ b/tests/test-frexpl.c @@ -1,5 +1,5 @@ /* Test of splitting a 'long double' into fraction and mantissa. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-fseterr.c b/tests/test-fseterr.c index de28326d..61584a41 100644 --- a/tests/test-fseterr.c +++ b/tests/test-fseterr.c @@ -1,5 +1,5 @@ /* Test setting the error indicator of a stream. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-fstat.c b/tests/test-fstat.c index f2cb2137..7a361b86 100644 --- a/tests/test-fstat.c +++ b/tests/test-fstat.c @@ -1,5 +1,5 @@ /* Tests of fstat() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ SIGNATURE_CHECK (fstat, int, (int, struct stat *)); #include "macros.h" int -main (int argc, char *argv[]) +main () { /* Test behaviour for invalid file descriptors. */ { diff --git a/tests/test-ftruncate.c b/tests/test-ftruncate.c index 64e1152a..e9daf1bd 100644 --- a/tests/test-ftruncate.c +++ b/tests/test-ftruncate.c @@ -1,5 +1,5 @@ /* Test truncating a file. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ SIGNATURE_CHECK (ftruncate, int, (int, off_t)); #include "macros.h" int -main (int argc, char *argv[]) +main (_GL_UNUSED int argc, char *argv[]) { const char *filename = argv[1]; diff --git a/tests/test-fwrite.c b/tests/test-fwrite.c index d362c40b..f00f35ca 100644 --- a/tests/test-fwrite.c +++ b/tests/test-fwrite.c @@ -1,5 +1,5 @@ /* Test of fwrite() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ SIGNATURE_CHECK (fwrite, size_t, (const void *, size_t, size_t, FILE *)); #include "macros.h" int -main (int argc, char **argv) +main () { const char *filename = "test-fwrite.txt"; @@ -45,6 +45,7 @@ main (int argc, char **argv) /* Test that fwrite() on an unbuffered stream sets errno if someone else closes the stream fd behind the back of stdio. */ + #if !defined __ANDROID__ /* fdsan */ { FILE *fp = fopen (filename, "w"); char buf[5] = "world"; @@ -57,6 +58,7 @@ main (int argc, char **argv) ASSERT (ferror (fp)); fclose (fp); } + #endif /* Test that fwrite() on an unbuffered stream sets errno if the stream was constructed with an invalid file descriptor. */ diff --git a/tests/test-getcwd-lgpl.c b/tests/test-getcwd-lgpl.c index 73fad473..1e7238a0 100644 --- a/tests/test-getcwd-lgpl.c +++ b/tests/test-getcwd-lgpl.c @@ -1,5 +1,5 @@ /* Test of getcwd() function. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -92,7 +92,7 @@ main (int argc, char **argv) /* Validate a POSIX requirement on size. */ errno = 0; - ASSERT (getcwd(pwd2, 0) == NULL); + ASSERT (getcwd (pwd2, 0) == NULL); ASSERT (errno == EINVAL); free (pwd1); diff --git a/tests/test-getdtablesize.c b/tests/test-getdtablesize.c index 48164279..401fe901 100644 --- a/tests/test-getdtablesize.c +++ b/tests/test-getdtablesize.c @@ -1,5 +1,5 @@ /* Test of getdtablesize() function. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,8 +25,13 @@ SIGNATURE_CHECK (getdtablesize, int, (void)); #include "macros.h" +/* Tell GCC not to warn about the specific edge cases tested here. */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +#endif + int -main (int argc, char *argv[]) +main () { ASSERT (getdtablesize () >= 3); ASSERT (dup2 (0, getdtablesize() - 1) == getdtablesize () - 1); diff --git a/tests/test-getprogname.c b/tests/test-getprogname.c index 8503f3c3..f26696db 100644 --- a/tests/test-getprogname.c +++ b/tests/test-getprogname.c @@ -1,5 +1,5 @@ /* Test the gnulib getprogname module. - Copyright (C) 2016-2022 Free Software Foundation, Inc. + Copyright (C) 2016-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,7 +16,8 @@ #include <config.h> -#include "getprogname.h" +#include <stdlib.h> + #include <string.h> #include <assert.h> diff --git a/tests/test-gettimeofday.c b/tests/test-gettimeofday.c index 47a5b58f..ea810bd5 100644 --- a/tests/test-gettimeofday.c +++ b/tests/test-gettimeofday.c @@ -1,6 +1,5 @@ /* - * Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. - * Written by Jim Meyering. + * Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,6 +14,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ +/* Written by Jim Meyering and Bruno Haible. */ + #include <config.h> #include <sys/time.h> @@ -26,10 +27,13 @@ SIGNATURE_CHECK (gettimeofday, int, #include <time.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> -int -main (void) +#include "macros.h" + +static void +test_clobber () { time_t t = 0; struct tm *lt; @@ -41,7 +45,44 @@ main (void) if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0) { fprintf (stderr, "gettimeofday still clobbers the localtime buffer!\n"); - return 1; + exit (1); } +} + +static void +test_consistency () +{ + struct timeval tv1; + time_t tt2; + struct timeval tv3; + time_t tt4; + + ASSERT (gettimeofday (&tv1, NULL) == 0); + tt2 = time (NULL); + ASSERT (gettimeofday (&tv3, NULL) == 0); + tt4 = time (NULL); + + /* Verify monotonicity of gettimeofday(). */ + ASSERT (tv1.tv_sec < tv3.tv_sec + || (tv1.tv_sec == tv3.tv_sec && tv1.tv_usec <= tv3.tv_usec)); + + /* Verify monotonicity of time(). */ + ASSERT (tt2 <= tt4); + + /* Verify that the tv_sec field of the result is the same as time(NULL). */ + /* Note: It's here that the dependency to the 'time' module is needed. + Without it, this assertion would sometimes fail on glibc systems, see + https://sourceware.org/bugzilla/show_bug.cgi?id=30200 */ + ASSERT (tv1.tv_sec <= tt2); + ASSERT (tt2 <= tv3.tv_sec); + ASSERT (tv3.tv_sec <= tt4); +} + +int +main (void) +{ + test_clobber (); + test_consistency (); + return 0; } diff --git a/tests/test-hard-locale.c b/tests/test-hard-locale.c index 8570bc61..151843ca 100644 --- a/tests/test-hard-locale.c +++ b/tests/test-hard-locale.c @@ -1,5 +1,5 @@ /* Test of determination whether a locale is different from the "C" locale. - Copyright (C) 2019-2022 Free Software Foundation, Inc. + Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,8 +38,10 @@ test_one (const char *name, int failure_bitmask) /* musl libc has special code for the C.UTF-8 locale; other than that, all locale names are accepted and all locales are trivial. OpenBSD returns the locale name that was set, but we don't know how it - behaves under the hood. Likewise for Haiku. */ -#if defined MUSL_LIBC || defined __OpenBSD__ || defined __HAIKU__ + behaves under the hood. Likewise for Haiku. + On Android >= 5.0, the "C" locale may have UTF-8 encoding, and we don't + know how it will behave in the future. */ +#if defined MUSL_LIBC || defined __OpenBSD__ || defined __HAIKU__ || defined __ANDROID__ expected = true; #else expected = !all_trivial; @@ -57,12 +59,14 @@ test_one (const char *name, int failure_bitmask) /* On NetBSD 7.0, some locales such as de_DE.ISO8859-1 and de_DE.UTF-8 have the LC_COLLATE category set to "C". - Similarly, on musl libc, with the C.UTF-8 locale. */ + Similarly, on musl libc, with the C.UTF-8 locale. + On Android >= 5.0, the "C" locale may have UTF-8 encoding, and we don't + know how it will behave in the future. */ #if defined __NetBSD__ expected = false; #elif defined MUSL_LIBC expected = strcmp (name, "C.UTF-8") != 0; -#elif (defined __OpenBSD__ && HAVE_DUPLOCALE) || defined __HAIKU__ /* OpenBSD >= 6.2, Haiku */ +#elif (defined __OpenBSD__ && HAVE_DUPLOCALE) || defined __HAIKU__ || defined __ANDROID__ /* OpenBSD >= 6.2, Haiku, Android */ expected = true; #else expected = !all_trivial; @@ -86,12 +90,16 @@ main () { int fail = 0; - /* The initial locale is the "C" or "POSIX" locale. */ + /* The initial locale is the "C" or "POSIX" locale. + On Android >= 5.0, it is equivalent to the "C.UTF-8" locale, cf. + <https://lists.gnu.org/archive/html/bug-gnulib/2023-01/msg00141.html>. */ +#if ! defined __ANDROID__ if (hard_locale (LC_CTYPE) || hard_locale (LC_COLLATE)) { fprintf (stderr, "The initial locale should not be hard!\n"); fail |= 1; } +#endif all_trivial = (setlocale (LC_ALL, "foobar") != NULL); diff --git a/tests/test-iconv-h.c b/tests/test-iconv-h.c index 32bba5e8..ba1534d3 100644 --- a/tests/test-iconv-h.c +++ b/tests/test-iconv-h.c @@ -1,5 +1,5 @@ /* Test of <iconv.h> substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-iconv.c b/tests/test-iconv.c index c92ac8aa..78bf7a2e 100644 --- a/tests/test-iconv.c +++ b/tests/test-iconv.c @@ -1,5 +1,5 @@ /* Test of character set conversion. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-ignore-value.c b/tests/test-ignore-value.c index d35314b3..32edfb45 100644 --- a/tests/test-ignore-value.c +++ b/tests/test-ignore-value.c @@ -1,6 +1,6 @@ /* Test the "ignore-value" module. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-inet_pton.c b/tests/test-inet_pton.c index 9ea0218f..6598d5a0 100644 --- a/tests/test-inet_pton.c +++ b/tests/test-inet_pton.c @@ -1,5 +1,5 @@ /* Test of inet_pton function. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-init.sh b/tests/test-init.sh index cac46f71..8f20fe61 100755 --- a/tests/test-init.sh +++ b/tests/test-init.sh @@ -1,6 +1,6 @@ #!/bin/sh # Unit tests for init.sh -# Copyright (C) 2011-2022 Free Software Foundation, Inc. +# Copyright (C) 2011-2024 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This program is free software: you can redistribute it and/or modify diff --git a/tests/test-intprops.c b/tests/test-intprops.c index a54d5812..e0d63d47 100644 --- a/tests/test-intprops.c +++ b/tests/test-intprops.c @@ -1,5 +1,5 @@ /* Test intprops.h. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -173,7 +173,7 @@ main (void) INT_<op>_OVERFLOW tests, so define macros to do both. OP is the operation, OPNAME its symbolic name, A and B its operands, T the result type, V the overflow flag, and VRES the result if V and if - two's complement. CHECK_BINOP is for most binary operatinos, + two's complement. CHECK_BINOP is for most binary operations, CHECK_SBINOP for binary +, -, * when the result type is signed, and CHECK_UNOP for unary operations. */ #define CHECK_BINOP(op, opname, a, b, t, v, vres) \ diff --git a/tests/test-inttypes.c b/tests/test-inttypes.c index 161b19c8..036ca510 100644 --- a/tests/test-inttypes.c +++ b/tests/test-inttypes.c @@ -1,5 +1,5 @@ /* Test of <inttypes.h> substitute. - Copyright (C) 2006-2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,8 +20,6 @@ #include <inttypes.h> -#include <stddef.h> - /* Tests for macros supposed to be defined in inttypes.h. */ const char *k = /* implicit string concatenation */ diff --git a/tests/test-ioctl.c b/tests/test-ioctl.c index 0db59c74..1fef85b4 100644 --- a/tests/test-ioctl.c +++ b/tests/test-ioctl.c @@ -1,5 +1,5 @@ /* Test of ioctl() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-isblank.c b/tests/test-isblank.c index 2af87f42..8e13bae1 100644 --- a/tests/test-isblank.c +++ b/tests/test-isblank.c @@ -1,5 +1,5 @@ /* Test of isblank() function. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,7 +29,7 @@ SIGNATURE_CHECK (isblank, int, (int)); #include "macros.h" int -main (int argc, char *argv[]) +main () { unsigned int c; diff --git a/tests/test-isnand-nolibm.c b/tests/test-isnand-nolibm.c index 6c3831c7..7b251aa9 100644 --- a/tests/test-isnand-nolibm.c +++ b/tests/test-isnand-nolibm.c @@ -1,5 +1,5 @@ /* Test of isnand() substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-isnand.h b/tests/test-isnand.h index ef758608..5369e336 100644 --- a/tests/test-isnand.h +++ b/tests/test-isnand.h @@ -1,5 +1,5 @@ /* Test of isnand() substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ #include "minus-zero.h" #include "infinity.h" #include "nan.h" +#include "snan.h" #include "macros.h" int @@ -40,24 +41,9 @@ main () ASSERT (!isnand (- Infinityd ())); /* Quiet NaN. */ ASSERT (isnand (NaNd ())); -#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT +#if HAVE_SNAND /* Signalling NaN. */ - { - #define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - typedef union { double value; unsigned int word[NWORDS]; } memory_double; - memory_double m; - m.value = NaNd (); -# if DBL_EXPBIT0_BIT > 0 - m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); -# else - m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif - m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - |= (unsigned int) 1 << DBL_EXPBIT0_BIT; - ASSERT (isnand (m.value)); - } + ASSERT (isnand (SNaNd ())); #endif return 0; } diff --git a/tests/test-isnanf-nolibm.c b/tests/test-isnanf-nolibm.c index c651a413..bd39f06f 100644 --- a/tests/test-isnanf-nolibm.c +++ b/tests/test-isnanf-nolibm.c @@ -1,5 +1,5 @@ /* Test of isnanf() substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-isnanf.h b/tests/test-isnanf.h index 0855a031..6f138016 100644 --- a/tests/test-isnanf.h +++ b/tests/test-isnanf.h @@ -1,5 +1,5 @@ /* Test of isnanf() substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ #include "minus-zero.h" #include "infinity.h" #include "nan.h" +#include "snan.h" #include "macros.h" int @@ -40,26 +41,9 @@ main () ASSERT (!isnanf (- Infinityf ())); /* Quiet NaN. */ ASSERT (isnanf (NaNf ())); -#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT +#if HAVE_SNANF /* Signalling NaN. */ - { - #define NWORDS \ - ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - typedef union { float value; unsigned int word[NWORDS]; } memory_float; - memory_float m; - m.value = NaNf (); -# if FLT_EXPBIT0_BIT > 0 - m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); -# else - m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif - if (FLT_EXPBIT0_WORD < NWORDS / 2) - m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; - else - m.word[0] |= (unsigned int) 1; - ASSERT (isnanf (m.value)); - } + ASSERT (isnanf (SNaNf ())); #endif return 0; } diff --git a/tests/test-isnanl-nolibm.c b/tests/test-isnanl-nolibm.c index 3c3f5d7d..caed43e0 100644 --- a/tests/test-isnanl-nolibm.c +++ b/tests/test-isnanl-nolibm.c @@ -1,5 +1,5 @@ /* Test of isnanl() substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-isnanl.h b/tests/test-isnanl.h index 37f986ed..ff42ee54 100644 --- a/tests/test-isnanl.h +++ b/tests/test-isnanl.h @@ -1,5 +1,5 @@ /* Test of isnanl() substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,16 +22,12 @@ #include "minus-zero.h" #include "infinity.h" #include "nan.h" +#include "snan.h" #include "macros.h" int main () { - #define NWORDS \ - ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - typedef union { unsigned int word[NWORDS]; long double value; } - memory_long_double; - /* Finite values. */ ASSERT (!isnanl (3.141L)); ASSERT (!isnanl (3.141e30L)); @@ -46,32 +42,9 @@ main () ASSERT (!isnanl (- Infinityl ())); /* Quiet NaN. */ ASSERT (isnanl (NaNl ())); - -#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT - /* A bit pattern that is different from a Quiet NaN. With a bit of luck, - it's a Signalling NaN. */ - { -#if defined __powerpc__ && LDBL_MANT_DIG == 106 - /* This is PowerPC "double double", a pair of two doubles. Inf and Nan are - represented as the corresponding 64-bit IEEE values in the first double; - the second is ignored. Manipulate only the first double. */ - #undef NWORDS - #define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -#endif - - memory_long_double m; - m.value = NaNl (); -# if LDBL_EXPBIT0_BIT > 0 - m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); -# else - m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif - m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; - ASSERT (isnanl (m.value)); - } +#if HAVE_SNANL + /* Signalling NaN. */ + ASSERT (isnanl (SNaNl ())); #endif #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE @@ -89,41 +62,42 @@ main () # endif { /* Quiet NaN. */ static memory_long_double x = - { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + { .word = LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; ASSERT (isnanl (x.value)); } { /* Signalling NaN. */ static memory_long_double x = - { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + { .word = LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; ASSERT (isnanl (x.value)); } /* isnanl should return something for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = - { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + { .word = LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = - { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + { .word = LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = - { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + { .word = LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Unnormalized number. */ static memory_long_double x = - { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + { .word = LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = - { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + { .word = LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } + #undef NWORDS #endif return 0; diff --git a/tests/test-iswblank.c b/tests/test-iswblank.c index fe9a9a1f..e5925179 100644 --- a/tests/test-iswblank.c +++ b/tests/test-iswblank.c @@ -1,5 +1,5 @@ /* Test of iswblank() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,5 +31,10 @@ main (void) /* Check that the isw* functions map WEOF to 0. */ ASSERT (!iswblank (e)); + /* Sanity check for the iswblank function. */ + ASSERT (iswblank (L' ')); + ASSERT (iswblank (L'\t')); + ASSERT (!iswblank (L'\n')); + return 0; } diff --git a/tests/test-iswdigit.c b/tests/test-iswdigit.c index ef024dc6..a5bcc4ff 100644 --- a/tests/test-iswdigit.c +++ b/tests/test-iswdigit.c @@ -1,5 +1,5 @@ /* Test of iswdigit() function. - Copyright (C) 2020-2022 Free Software Foundation, Inc. + Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-iswpunct.c b/tests/test-iswpunct.c new file mode 100644 index 00000000..c0bbd168 --- /dev/null +++ b/tests/test-iswpunct.c @@ -0,0 +1,153 @@ +/* Test of iswpunct() function. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <wctype.h> + +#include "signature.h" +SIGNATURE_CHECK (iswpunct, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of iswpunct for the multibyte character s[0..n-1]. */ +static int +for_character (const char *s, size_t n) +{ + mbstate_t state; + wchar_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, s, n, &state); + if (ret == n) + return iswpunct (wc); + else + return 0; +} + +int +main (int argc, char *argv[]) +{ + int is; + char buf[4]; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test WEOF. */ + is = iswpunct (WEOF); + ASSERT (is == 0); + + /* Test single-byte characters. + POSIX specifies in + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> + no explicit list of punctuation or symbol characters. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = (unsigned char) c; + is = for_character (buf, 1); + switch (c) + { + case ' ': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': + /* c is an alphanumeric or space character. */ + ASSERT (is == 0); + break; + case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case ':': case ';': case '<': case '=': case '>': + case '?': + case '[': case '\\': case ']': case '^': case '_': + case '{': case '|': case '}': case '~': + /* These characters are usually expected to be punctuation or + symbol characters. */ + ASSERT (is != 0); + break; + default: + ASSERT (is == 0); + break; + } + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '0': + /* C locale; tested above. */ + /* These characters are not in the ISO C "basic character set", but + are nevertheless usually expected to be punctuation or symbol + characters. */ + is = for_character ("$", 1); + ASSERT (is != 0); + is = for_character ("@", 1); + ASSERT (is != 0); + is = for_character ("`", 1); + ASSERT (is != 0); + return 0; + } + + return 1; +} diff --git a/tests/test-iswpunct.sh b/tests/test-iswpunct.sh new file mode 100755 index 00000000..366e1859 --- /dev/null +++ b/tests/test-iswpunct.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-iswpunct${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-iswpunct${EXEEXT} 0 || exit 1 + +exit 0 diff --git a/tests/test-iswxdigit.c b/tests/test-iswxdigit.c index 96e578b0..f4aeb493 100644 --- a/tests/test-iswxdigit.c +++ b/tests/test-iswxdigit.c @@ -1,5 +1,5 @@ /* Test of iswxdigit() function. - Copyright (C) 2020-2022 Free Software Foundation, Inc. + Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-langinfo.c b/tests/test-langinfo.c index 1a909b16..9561793b 100644 --- a/tests/test-langinfo.c +++ b/tests/test-langinfo.c @@ -1,5 +1,5 @@ /* Test of <langinfo.h> substitute. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-largefile.c b/tests/test-largefile.c new file mode 100644 index 00000000..d2d6a157 --- /dev/null +++ b/tests/test-largefile.c @@ -0,0 +1,51 @@ +/* Test of largefile module. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023. */ + +/* This test may fail if AC_SYS_LARGEFILE could not arrange for a 64-bit off_t. + This should be rare, though: only very old systems don't have support for + files larger than 2 GiB. */ + +#include <config.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include "intprops.h" + +/* Although these tests could be done with static_assert, the test + harness prefers dynamic checking. */ + +int +main (void) +{ + int result = 0; + + /* Check the range of off_t. + With MSVC, this test succeeds only thanks to the 'sys_types' module. */ + if (TYPE_MAXIMUM (off_t) >> 31 >> 31 == 0) + result |= 1; + + /* Check the size of the 'struct stat' field 'st_size'. + With MSVC, this test succeeds only thanks to the 'sys_stat' module. */ + { + struct stat st; + if (sizeof st.st_size != sizeof (off_t)) + result |= 2; + } + + return result; +} diff --git a/tests/test-limits-h.c b/tests/test-limits-h.c index ddcb5d56..6f574c88 100644 --- a/tests/test-limits-h.c +++ b/tests/test-limits-h.c @@ -1,5 +1,5 @@ /* Test of <limits.h> substitute. - Copyright 2016-2022 Free Software Foundation, Inc. + Copyright 2016-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -94,7 +94,11 @@ unsigned long long limits11[] = { ULLONG_MAX }; static_assert (TYPE_MINIMUM (unsigned long long int) == 0); static_assert (TYPE_MAXIMUM (unsigned long long int) == ULLONG_MAX); -/* Macros specified by ISO/IEC TS 18661-1:2014. */ +/* Specified by POSIX, not by ISO C. */ + +long long limits12[] = { SSIZE_MAX }; + +/* Macros specified by C23 and by ISO/IEC TS 18661-1:2014. */ verify_width (CHAR_WIDTH, CHAR_MIN, CHAR_MAX); verify_width (SCHAR_WIDTH, SCHAR_MIN, SCHAR_MAX); @@ -108,10 +112,19 @@ verify_width (ULONG_WIDTH, 0, ULONG_MAX); verify_width (LLONG_WIDTH, LLONG_MIN, LLONG_MAX); verify_width (ULLONG_WIDTH, 0, ULLONG_MAX); -/* Macros specified by C2x. */ +/* Macros specified by C23. */ int bool_attrs[] = { BOOL_MAX, BOOL_WIDTH }; -static_assert (BOOL_MAX == (((1U << (BOOL_WIDTH - 1)) - 1) * 2) + 1); +static_assert (BOOL_MAX == 1); + +static_assert (0 < MB_LEN_MAX); + +/* Get ssize_t, size_t. */ +#include <sys/types.h> + +static_assert (TYPE_MAXIMUM (ssize_t) == SSIZE_MAX); +/* Verify that ssize_t has the same width as size_t. */ +static_assert (TYPE_MAXIMUM (size_t) / 2 == SSIZE_MAX); int main (void) diff --git a/tests/test-listen.c b/tests/test-listen.c index e9d34568..21fc7a2b 100644 --- a/tests/test-listen.c +++ b/tests/test-listen.c @@ -1,5 +1,5 @@ /* Test listen() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,6 +27,11 @@ SIGNATURE_CHECK (listen, int, (int, int)); #include "sockets.h" #include "macros.h" +/* Tell GCC not to warn about the specific edge cases tested here. */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-use-without-check" +#endif + int main (void) { diff --git a/tests/test-localcharset.c b/tests/test-localcharset.c index 9d6f941c..da6cbf6d 100644 --- a/tests/test-localcharset.c +++ b/tests/test-localcharset.c @@ -1,5 +1,5 @@ /* Manual test of localcharset() function. - Copyright (C) 2018-2022 Free Software Foundation, Inc. + Copyright (C) 2018-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-locale.c b/tests/test-locale.c index 3aad7d85..e4e61aad 100644 --- a/tests/test-locale.c +++ b/tests/test-locale.c @@ -1,5 +1,5 @@ /* Test of <locale.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-localename.c b/tests/test-localename.c index 9ba388f3..03b70527 100644 --- a/tests/test-localename.c +++ b/tests/test-localename.c @@ -1,5 +1,5 @@ /* Test of gl_locale_name function and its variants. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,6 +30,35 @@ # define HAVE_GOOD_USELOCALE 1 #endif +#ifdef __HAIKU__ +/* Work around Haiku bug <https://dev.haiku-os.org/ticket/18344>. */ +# define freelocale(loc) ((void) (loc)) +#endif + +/* Suppress GCC false positive. */ +#if __GNUC__ >= 12 +# pragma GCC diagnostic ignored "-Wanalyzer-use-of-uninitialized-value" +#endif + +/* The name that setlocale(,NULL) returns for the "C" locale. */ +#ifdef __HAIKU__ +# define C_CANONICALIZED "POSIX" +#else +# define C_CANONICALIZED "C" +#endif + +static int +is_default (const char *name) +{ + return strcmp (name, gl_locale_name_default ()) == 0 + || (strcmp (name, C_CANONICALIZED) == 0 + && strcmp (gl_locale_name_default (), "C") == 0) +#if MUSL_LIBC + || (strcmp (name, "C.UTF-8") == 0 + && strcmp (gl_locale_name_default (), "C") == 0) +#endif + ; +} #if HAVE_GOOD_USELOCALE @@ -101,10 +130,8 @@ test_locale_name (void) unsetenv ("LC_TELEPHONE"); ret = setlocale (LC_ALL, ""); ASSERT (ret != NULL); - ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), - gl_locale_name_default ()) == 0); - ASSERT (strcmp (gl_locale_name (LC_NUMERIC, "LC_NUMERIC"), - gl_locale_name_default ()) == 0); + ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"))); + ASSERT (is_default (gl_locale_name (LC_NUMERIC, "LC_NUMERIC"))); /* Check that an empty environment variable is treated like an unset environment variable. */ @@ -114,32 +141,28 @@ test_locale_name (void) unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); - ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), - gl_locale_name_default ()) == 0); + ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"))); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); - ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), - gl_locale_name_default ()) == 0); + ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"))); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); - ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), - gl_locale_name_default ()) == 0); + ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"))); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "", 1); setlocale (LC_ALL, ""); - ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), - gl_locale_name_default ()) == 0); + ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"))); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ @@ -149,21 +172,24 @@ test_locale_name (void) unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); - ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), + C_CANONICALIZED) == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); setenv ("LC_MESSAGES", "C", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); - ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), + C_CANONICALIZED) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); - ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), + C_CANONICALIZED) == 0); /* Check mixed situations. */ @@ -195,7 +221,7 @@ test_locale_name (void) if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); - ASSERT (strcmp (name, gl_locale_name_default ()) == 0); + ASSERT (is_default (name)); name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } @@ -543,9 +569,9 @@ test_locale_name_posix (void) ret = setlocale (LC_ALL, ""); ASSERT (ret != NULL); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); - ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); + ASSERT (name == NULL || is_default (name)); name = gl_locale_name_posix (LC_NUMERIC, "LC_NUMERIC"); - ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); + ASSERT (name == NULL || is_default (name)); /* Check that an empty environment variable is treated like an unset environment variable. */ @@ -556,7 +582,7 @@ test_locale_name_posix (void) unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); - ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); + ASSERT (name == NULL || is_default (name)); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); @@ -564,7 +590,7 @@ test_locale_name_posix (void) unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); - ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); + ASSERT (name == NULL || is_default (name)); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); @@ -572,7 +598,7 @@ test_locale_name_posix (void) unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); - ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); + ASSERT (name == NULL || is_default (name)); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); @@ -580,7 +606,7 @@ test_locale_name_posix (void) setenv ("LANG", "", 1); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); - ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); + ASSERT (name == NULL || is_default (name)); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ @@ -591,7 +617,7 @@ test_locale_name_posix (void) unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); - ASSERT (strcmp (name, "C") == 0); + ASSERT (strcmp (name, C_CANONICALIZED) == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); @@ -599,7 +625,7 @@ test_locale_name_posix (void) unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); - ASSERT (strcmp (name, "C") == 0); + ASSERT (strcmp (name, C_CANONICALIZED) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); @@ -607,7 +633,7 @@ test_locale_name_posix (void) setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); - ASSERT (strcmp (name, "C") == 0); + ASSERT (strcmp (name, C_CANONICALIZED) == 0); /* Check mixed situations. */ @@ -634,7 +660,7 @@ test_locale_name_posix (void) if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE"); - ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); + ASSERT (name == NULL || is_default (name)); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } @@ -652,7 +678,7 @@ test_locale_name_posix (void) setlocale (LC_ALL, ""); uselocale (locale); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); - ASSERT (strcmp (name, "C") == 0); + ASSERT (strcmp (name, C_CANONICALIZED) == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } diff --git a/tests/test-lock.c b/tests/test-lock.c index a8fb32f8..b5a5240f 100644 --- a/tests/test-lock.c +++ b/tests/test-lock.c @@ -1,5 +1,5 @@ /* Test of locking in multithreaded situations. - Copyright (C) 2005, 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2005, 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -118,7 +118,7 @@ static int account[ACCOUNT_COUNT]; static int random_account (void) { - return ((unsigned int) rand () >> 3) % ACCOUNT_COUNT; + return ((unsigned long) random () >> 3) % ACCOUNT_COUNT; } static void @@ -143,7 +143,7 @@ check_accounts (void) gl_lock_define_initialized(static, my_lock) static void * -lock_mutator_thread (void *arg) +lock_mutator_thread (_GL_UNUSED void *arg) { int repeat; @@ -157,7 +157,7 @@ lock_mutator_thread (void *arg) i1 = random_account (); i2 = random_account (); - value = ((unsigned int) rand () >> 3) % 10; + value = ((unsigned long) random () >> 3) % 10; account[i1] += value; account[i2] -= value; @@ -181,7 +181,7 @@ lock_mutator_thread (void *arg) static struct atomic_int lock_checker_done; static void * -lock_checker_thread (void *arg) +lock_checker_thread (_GL_UNUSED void *arg) { while (get_atomic_int_value (&lock_checker_done) == 0) { @@ -234,7 +234,7 @@ test_lock (void) gl_rwlock_define_initialized(static, my_rwlock) static void * -rwlock_mutator_thread (void *arg) +rwlock_mutator_thread (_GL_UNUSED void *arg) { int repeat; @@ -248,7 +248,7 @@ rwlock_mutator_thread (void *arg) i1 = random_account (); i2 = random_account (); - value = ((unsigned int) rand () >> 3) % 10; + value = ((unsigned long) random () >> 3) % 10; account[i1] += value; account[i2] -= value; @@ -266,7 +266,7 @@ rwlock_mutator_thread (void *arg) static struct atomic_int rwlock_checker_done; static void * -rwlock_checker_thread (void *arg) +rwlock_checker_thread (_GL_UNUSED void *arg) { while (get_atomic_int_value (&rwlock_checker_done) == 0) { @@ -331,12 +331,12 @@ recshuffle (void) i1 = random_account (); i2 = random_account (); - value = ((unsigned int) rand () >> 3) % 10; + value = ((unsigned long) random () >> 3) % 10; account[i1] += value; account[i2] -= value; /* Recursive with probability 0.5. */ - if (((unsigned int) rand () >> 3) % 2) + if (((unsigned long) random () >> 3) % 2) recshuffle (); dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); @@ -345,7 +345,7 @@ recshuffle (void) } static void * -reclock_mutator_thread (void *arg) +reclock_mutator_thread (_GL_UNUSED void *arg) { int repeat; @@ -369,7 +369,7 @@ reclock_mutator_thread (void *arg) static struct atomic_int reclock_checker_done; static void * -reclock_checker_thread (void *arg) +reclock_checker_thread (_GL_UNUSED void *arg) { while (get_atomic_int_value (&reclock_checker_done) == 0) { diff --git a/tests/test-lstat.c b/tests/test-lstat.c index c35d41cb..3a2d61ec 100644 --- a/tests/test-lstat.c +++ b/tests/test-lstat.c @@ -1,5 +1,5 @@ /* Test of lstat() function. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-lstat.h b/tests/test-lstat.h index 3982d160..31476132 100644 --- a/tests/test-lstat.h +++ b/tests/test-lstat.h @@ -1,5 +1,5 @@ /* Test of lstat() function. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,14 +32,14 @@ test_lstat_func (int (*func) (char const *, struct stat *), bool print) ASSERT (func (".", &st1) == 0); ASSERT (func ("./", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) - ASSERT (SAME_INODE (st1, st2)); + ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); ASSERT (func ("/", &st1) == 0); ASSERT (func ("///", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) - ASSERT (SAME_INODE (st1, st2)); + ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); @@ -90,7 +90,7 @@ test_lstat_func (int (*func) (char const *, struct stat *), bool print) ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) - ASSERT (SAME_INODE (st1, st2)); + ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (func (BASE "link2", &st1) == 0); diff --git a/tests/test-malloc-gnu.c b/tests/test-malloc-gnu.c index 8873eb89..490efb01 100644 --- a/tests/test-malloc-gnu.c +++ b/tests/test-malloc-gnu.c @@ -1,5 +1,5 @@ /* Test of malloc function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ #include "macros.h" int -main (int argc, char **argv) +main (int argc, _GL_UNUSED char **argv) { /* Check that malloc (0) is not a NULL pointer. */ void *volatile p = malloc (0); diff --git a/tests/test-malloca.c b/tests/test-malloca.c index 8665f465..9d46cd42 100644 --- a/tests/test-malloca.c +++ b/tests/test-malloca.c @@ -1,5 +1,5 @@ /* Test of safe automatic memory allocation. - Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-math.c b/tests/test-math.c index 7089e8d6..d853f2a8 100644 --- a/tests/test-math.c +++ b/tests/test-math.c @@ -1,5 +1,5 @@ /* Test of <math.h> substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,15 +50,15 @@ choke me choke me #endif -#include <limits.h> - -#include "macros.h" - #if 0 /* Check that NAN expands into a constant expression. */ static float n = NAN; #endif +#include <limits.h> + +#include "macros.h" + /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ diff --git a/tests/test-mbrtoc32-1.sh b/tests/test-mbrtoc32-1.sh new file mode 100755 index 00000000..85abbdad --- /dev/null +++ b/tests/test-mbrtoc32-1.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Test whether the POSIX locale has encoding errors. +LC_ALL=C \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 1 || exit 1 +LC_ALL=POSIX \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 1 || exit 1 + +exit 0 diff --git a/tests/test-mbrtoc32-2.sh b/tests/test-mbrtoc32-2.sh new file mode 100755 index 00000000..1d44338a --- /dev/null +++ b/tests/test-mbrtoc32-2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 2 diff --git a/tests/test-mbrtoc32-3.sh b/tests/test-mbrtoc32-3.sh new file mode 100755 index 00000000..082bad84 --- /dev/null +++ b/tests/test-mbrtoc32-3.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 3 diff --git a/tests/test-mbrtoc32-4.sh b/tests/test-mbrtoc32-4.sh new file mode 100755 index 00000000..b23a3272 --- /dev/null +++ b/tests/test-mbrtoc32-4.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional japanese locale is installed" + else + echo "Skipping test: no traditional japanese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_JA \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 4 diff --git a/tests/test-mbrtoc32-5.sh b/tests/test-mbrtoc32-5.sh new file mode 100755 index 00000000..734a959e --- /dev/null +++ b/tests/test-mbrtoc32-5.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no transitional chinese locale is installed" + else + echo "Skipping test: no transitional chinese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_ZH_CN \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 5 diff --git a/tests/test-mbrtoc32-w32-2.sh b/tests/test-mbrtoc32-w32-2.sh new file mode 100755 index 00000000..bf6b61ce --- /dev/null +++ b/tests/test-mbrtoc32-w32-2.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP1252 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} French_France 1252 diff --git a/tests/test-mbrtoc32-w32-3.sh b/tests/test-mbrtoc32-w32-3.sh new file mode 100755 index 00000000..dd96b17f --- /dev/null +++ b/tests/test-mbrtoc32-w32-3.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP1256 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 diff --git a/tests/test-mbrtoc32-w32-4.sh b/tests/test-mbrtoc32-w32-4.sh new file mode 100755 index 00000000..b2b889b6 --- /dev/null +++ b/tests/test-mbrtoc32-w32-4.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test some UTF-8 locales. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 diff --git a/tests/test-mbrtoc32-w32-5.sh b/tests/test-mbrtoc32-w32-5.sh new file mode 100755 index 00000000..21a826b5 --- /dev/null +++ b/tests/test-mbrtoc32-w32-5.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP932 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Japanese_Japan 932 diff --git a/tests/test-mbrtoc32-w32-6.sh b/tests/test-mbrtoc32-w32-6.sh new file mode 100755 index 00000000..4e261dbd --- /dev/null +++ b/tests/test-mbrtoc32-w32-6.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP950 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_Taiwan 950 diff --git a/tests/test-mbrtoc32-w32-7.sh b/tests/test-mbrtoc32-w32-7.sh new file mode 100755 index 00000000..200c248c --- /dev/null +++ b/tests/test-mbrtoc32-w32-7.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP936 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_China 936 diff --git a/tests/test-mbrtoc32-w32-8.sh b/tests/test-mbrtoc32-w32-8.sh new file mode 100755 index 00000000..a763e9fe --- /dev/null +++ b/tests/test-mbrtoc32-w32-8.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a GB18030 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_China 54936 diff --git a/tests/test-mbrtoc32-w32.c b/tests/test-mbrtoc32-w32.c new file mode 100644 index 00000000..93196d48 --- /dev/null +++ b/tests/test-mbrtoc32-w32.c @@ -0,0 +1,750 @@ +/* Test of conversion of multibyte character to 32-bit wide character. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <uchar.h> + +#include <errno.h> +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "localcharset.h" +#include "macros.h" + +#if defined _WIN32 && !defined __CYGWIN__ + +static int +test_one_locale (const char *name, int codepage) +{ + mbstate_t state; + char32_t wc; + size_t ret; + +# if 1 + /* Portable code to set the locale. */ + { + char name_with_codepage[1024]; + + sprintf (name_with_codepage, "%s.%d", name, codepage); + + /* Set the locale. */ + if (setlocale (LC_ALL, name_with_codepage) == NULL) + return 77; + } +# else + /* Hacky way to set a locale.codepage combination that setlocale() refuses + to set. */ + { + /* Codepage of the current locale, set with setlocale(). + Not necessarily the same as GetACP(). */ + extern __declspec(dllimport) unsigned int __lc_codepage; + + /* Set the locale. */ + if (setlocale (LC_ALL, name) == NULL) + return 77; + + /* Clobber the codepage and MB_CUR_MAX, both set by setlocale(). */ + __lc_codepage = codepage; + switch (codepage) + { + case 1252: + case 1256: + MB_CUR_MAX = 1; + break; + case 932: + case 950: + case 936: + MB_CUR_MAX = 2; + break; + case 54936: + case 65001: + MB_CUR_MAX = 4; + break; + } + + /* Test whether the codepage is really available. */ + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtoc32 (&wc, " ", 1, &state) == (size_t)(-1)) + return 77; + } +# endif + + /* Test zero-length input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "x", 0, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (mbsinit (&state)); + } + + /* Test NUL byte input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "", 1, &state); + ASSERT (ret == 0); + ASSERT (wc == 0); + ASSERT (mbsinit (&state)); + ret = mbrtoc32 (NULL, "", 1, &state); + ASSERT (ret == 0); + ASSERT (mbsinit (&state)); + } + + /* Test single-byte input. */ + { + int c; + char buf[1]; + + memset (&state, '\0', sizeof (mbstate_t)); + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = c; + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == c); + ASSERT (mbsinit (&state)); + ret = mbrtoc32 (NULL, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + break; + } + } + + /* Test special calling convention, passing a NULL pointer. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, NULL, 5, &state); + ASSERT (ret == 0); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + } + + switch (codepage) + { + case 1252: + /* Locale encoding is CP1252, an extension of ISO-8859-1. */ + { + char input[] = "B\374\337er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 1, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == (unsigned char) '\374'); + ASSERT (wc == 0x00FC); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[1] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 2, 3, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 2, 3, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == (unsigned char) '\337'); + ASSERT (wc == 0x00DF); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 4, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + + case 1256: + /* Locale encoding is CP1256, not the same as ISO-8859-6. */ + { + char input[] = "x\302\341\346y"; /* "xآلوy" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'x'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 1, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == (unsigned char) '\302'); + ASSERT (wc == 0x0622); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[1] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 2, 3, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 2, 3, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == (unsigned char) '\341'); + ASSERT (wc == 0x0644); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 2, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == (unsigned char) '\346'); + ASSERT (wc == 0x0648); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[3] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 4, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'y'); + ASSERT (mbsinit (&state)); + } + return 0; + + case 65001: + /* Locale encoding is CP65001 = UTF-8. */ + if (strcmp (locale_charset (), "UTF-8") != 0) + return 77; + { + char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 's'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 2, 7, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x00FC); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 3, 6, &state); + ASSERT (ret == 2); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 6, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x00DF); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 5, 4, &state); + ASSERT (ret == 4); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 5, 4, &state); + ASSERT (ret == 4); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[5] = '\0'; + input[6] = '\0'; + input[7] = '\0'; + input[8] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 9, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '!'); + ASSERT (mbsinit (&state)); + + /* Test some invalid input. */ + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\303\300", 2, &state); /* 0xC3 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\343\300", 2, &state); /* 0xE3 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\343\300\200", 3, &state); /* 0xE3 0xC0 0x80 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\343\200\300", 3, &state); /* 0xE3 0x80 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\363\300", 2, &state); /* 0xF3 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\363\300\200\200", 4, &state); /* 0xF3 0xC0 0x80 0x80 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\363\200\300", 3, &state); /* 0xF3 0x80 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\363\200\300\200", 4, &state); /* 0xF3 0x80 0xC0 0x80 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\363\200\200\300", 4, &state); /* 0xF3 0x80 0x80 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + } + return 0; + + case 932: + /* Locale encoding is CP932, similar to Shift_JIS. */ + { + char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '<'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 2, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x65E5); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[1] = '\0'; + input[2] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[3] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 4, 4, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x672C); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[4] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[5] = '\0'; + input[6] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 7, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '>'); + ASSERT (mbsinit (&state)); + + /* Test some invalid input. */ + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ + ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ + ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == 0x30FB)); + } + return 0; + + case 950: + /* Locale encoding is CP950, similar to Big5. */ + { + char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '<'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 2, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x65E5); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[1] = '\0'; + input[2] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[3] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 4, 4, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x672C); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[4] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[5] = '\0'; + input[6] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 7, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '>'); + ASSERT (mbsinit (&state)); + + /* Test some invalid input. */ + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ + ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ + ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); + } + return 0; + + case 936: + /* Locale encoding is CP936 = GBK, an extension of GB2312. */ + { + char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '<'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 2, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x65E5); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[1] = '\0'; + input[2] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[3] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 4, 4, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x672C); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[4] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[5] = '\0'; + input[6] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 7, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '>'); + ASSERT (mbsinit (&state)); + + /* Test some invalid input. */ + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ + ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ + ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); + } + return 0; + + case 54936: + /* Locale encoding is CP54936 = GB18030. */ + if (strcmp (locale_charset (), "GB18030") != 0) + return 77; + { + char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 's'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 2, 9, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x00FC); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 3, 8, &state); + ASSERT (ret == 4); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 8, &state); + ASSERT (ret == 4); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x00DF); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + input[5] = '\0'; + input[6] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 7, 4, &state); + ASSERT (ret == 4); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 7, 4, &state); + ASSERT (ret == 4); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[7] = '\0'; + input[8] = '\0'; + input[9] = '\0'; + input[10] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 11, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '!'); + ASSERT (mbsinit (&state)); + + /* Test some invalid input. */ + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\201\045", 2, &state); /* 0x81 0x25 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\201\060\377", 3, &state); /* 0x81 0x30 0xFF */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\201\060\377\064", 4, &state); /* 0x81 0x30 0xFF 0x34 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\201\060\211\072", 4, &state); /* 0x81 0x30 0x89 0x3A */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + } + return 0; + + default: + return 1; + } +} + +int +main (int argc, char *argv[]) +{ + int codepage = atoi (argv[argc - 1]); + int result; + int i; + + result = 77; + for (i = 1; i < argc - 1; i++) + { + int ret = test_one_locale (argv[i], codepage); + + if (ret != 77) + result = ret; + } + + if (result == 77) + { + fprintf (stderr, "Skipping test: found no locale with codepage %d\n", + codepage); + } + return result; +} + +#else + +int +main (int argc, char *argv[]) +{ + fputs ("Skipping test: not a native Windows system\n", stderr); + return 77; +} + +#endif diff --git a/tests/test-mbrtoc32.c b/tests/test-mbrtoc32.c new file mode 100644 index 00000000..6fffb2a7 --- /dev/null +++ b/tests/test-mbrtoc32.c @@ -0,0 +1,441 @@ +/* Test of conversion of multibyte character to 32-bit wide character. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (mbrtoc32, size_t, + (char32_t *, const char *, size_t, mbstate_t *)); + +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + mbstate_t state; + char32_t wc; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test zero-length input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "x", 0, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (mbsinit (&state)); + } + + /* Test NUL byte input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "", 1, &state); + ASSERT (ret == 0); + ASSERT (wc == 0); + ASSERT (mbsinit (&state)); + ret = mbrtoc32 (NULL, "", 1, &state); + ASSERT (ret == 0); + ASSERT (mbsinit (&state)); + } + + /* Test single-byte input. */ + { + int c; + char buf[1]; + + memset (&state, '\0', sizeof (mbstate_t)); + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + ASSERT (c < 0x80); + /* c is an ASCII character. */ + buf[0] = c; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == c); + ASSERT (mbsinit (&state)); + + ret = mbrtoc32 (NULL, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + + break; + default: + break; + } + } + + /* Test special calling convention, passing a NULL pointer. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, NULL, 5, &state); + ASSERT (ret == 0); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + } + +#ifdef __ANDROID__ + /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the + "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" + locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, + that is, effectively the "C.UTF-8" locale. */ + if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) + argv[1] = "3"; +#endif + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* C or POSIX locale. */ + { + int c; + char buf[1]; + + memset (&state, '\0', sizeof (mbstate_t)); + for (c = 0; c < 0x100; c++) + if (c != 0) + { + /* We are testing all nonnull bytes. */ + buf[0] = c; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, buf, 1, &state); + /* POSIX:2018 says regarding mbrtowc: "In the POSIX locale an + [EILSEQ] error cannot occur since all byte values are valid + characters." It is reasonable to expect mbrtoc32 to behave + in the same way. */ + ASSERT (ret == 1); + if (c < 0x80) + /* c is an ASCII character. */ + ASSERT (wc == c); + else + /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. + But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ + ASSERT (wc == (btoc32 (c) == 0xDF00 + c ? btoc32 (c) : c)); + ASSERT (mbsinit (&state)); + + ret = mbrtoc32 (NULL, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + } + } + return 0; + + case '2': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + char input[] = "B\374\337er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 1, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == (unsigned char) '\374'); + #if GL_CHAR32_T_IS_UNICODE + ASSERT (wc == 0x00FC); /* expect Unicode encoding */ + #endif + ASSERT (mbsinit (&state)); + input[1] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 2, 3, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 2, 3, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == (unsigned char) '\337'); + #if GL_CHAR32_T_IS_UNICODE + ASSERT (wc == 0x00DF); /* expect Unicode encoding */ + #endif + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 4, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '3': + /* Locale encoding is UTF-8. */ + { + char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 's'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 2, 7, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x00FC); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 3, 6, &state); + ASSERT (ret == 2); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 6, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x00DF); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 5, 4, &state); + ASSERT (ret == 4); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 5, 4, &state); + ASSERT (ret == 4); + ASSERT (c32tob (wc) == EOF); + ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ + ASSERT (mbsinit (&state)); + input[5] = '\0'; + input[6] = '\0'; + input[7] = '\0'; + input[8] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 9, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '!'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '4': + /* Locale encoding is EUC-JP. */ + { + char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '<'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 2, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + #if GL_CHAR32_T_IS_UNICODE + ASSERT (wc == 0x65E5); /* expect Unicode encoding */ + #endif + ASSERT (mbsinit (&state)); + input[1] = '\0'; + input[2] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[3] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 4, 4, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == EOF); + #if GL_CHAR32_T_IS_UNICODE + ASSERT (wc == 0x672C); /* expect Unicode encoding */ + #endif + ASSERT (mbsinit (&state)); + input[4] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (c32tob (wc) == EOF); + #if GL_CHAR32_T_IS_UNICODE + ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ + #endif + ASSERT (mbsinit (&state)); + input[5] = '\0'; + input[6] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 7, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '>'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '5': + /* Locale encoding is GB18030. */ + #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) + fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); + return 77; + #endif + { + char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 's'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 2, 9, &state); + ASSERT (ret == 1); + ASSERT (c32tob (wc) == EOF); + #if GL_CHAR32_T_IS_UNICODE + ASSERT (wc == 0x00FC); /* expect Unicode encoding */ + #endif + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 3, 8, &state); + ASSERT (ret == 4); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 3, 8, &state); + ASSERT (ret == 4); + ASSERT (c32tob (wc) == EOF); + #if GL_CHAR32_T_IS_UNICODE + ASSERT (wc == 0x00DF); /* expect Unicode encoding */ + #endif + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + input[5] = '\0'; + input[6] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtoc32 (NULL, input + 7, 4, &state); + ASSERT (ret == 4); + ASSERT (mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 7, 4, &state); + ASSERT (ret == 4); + ASSERT (c32tob (wc) == EOF); + #if GL_CHAR32_T_IS_UNICODE + ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ + #endif + ASSERT (mbsinit (&state)); + input[7] = '\0'; + input[8] = '\0'; + input[9] = '\0'; + input[10] = '\0'; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, input + 11, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '!'); + ASSERT (mbsinit (&state)); + } + return 0; + } + + return 1; +} diff --git a/tests/test-mbrtowc-1.sh b/tests/test-mbrtowc-1.sh new file mode 100755 index 00000000..f0a1feda --- /dev/null +++ b/tests/test-mbrtowc-1.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Test whether the POSIX locale has encoding errors. +LC_ALL=C \ +${CHECKER} ./test-mbrtowc${EXEEXT} 1 || exit 1 +LC_ALL=POSIX \ +${CHECKER} ./test-mbrtowc${EXEEXT} 1 || exit 1 + +exit 0 diff --git a/tests/test-mbrtowc-2.sh b/tests/test-mbrtowc-2.sh new file mode 100755 index 00000000..30662926 --- /dev/null +++ b/tests/test-mbrtowc-2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +${CHECKER} ./test-mbrtowc${EXEEXT} 2 diff --git a/tests/test-mbrtowc-3.sh b/tests/test-mbrtowc-3.sh new file mode 100755 index 00000000..36b0023c --- /dev/null +++ b/tests/test-mbrtowc-3.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +${CHECKER} ./test-mbrtowc${EXEEXT} 3 diff --git a/tests/test-mbrtowc3.sh b/tests/test-mbrtowc-4.sh index eca8d648..1c5943ea 100755 --- a/tests/test-mbrtowc3.sh +++ b/tests/test-mbrtowc-4.sh @@ -12,4 +12,4 @@ if test $LOCALE_JA = none; then fi LC_ALL=$LOCALE_JA \ -${CHECKER} ./test-mbrtowc${EXEEXT} 3 +${CHECKER} ./test-mbrtowc${EXEEXT} 4 diff --git a/tests/test-mbrtowc4.sh b/tests/test-mbrtowc-5.sh index 7da23a3c..8690bbef 100755 --- a/tests/test-mbrtowc4.sh +++ b/tests/test-mbrtowc-5.sh @@ -12,4 +12,4 @@ if test $LOCALE_ZH_CN = none; then fi LC_ALL=$LOCALE_ZH_CN \ -${CHECKER} ./test-mbrtowc${EXEEXT} 4 +${CHECKER} ./test-mbrtowc${EXEEXT} 5 diff --git a/tests/test-mbrtowc-w32-1.sh b/tests/test-mbrtowc-w32-1.sh deleted file mode 100755 index fec9eadf..00000000 --- a/tests/test-mbrtowc-w32-1.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# Test a CP1252 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France 1252 diff --git a/tests/test-mbrtowc-w32-2.sh b/tests/test-mbrtowc-w32-2.sh index c55a0ec0..fec9eadf 100755 --- a/tests/test-mbrtowc-w32-2.sh +++ b/tests/test-mbrtowc-w32-2.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a CP1256 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 +# Test a CP1252 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France 1252 diff --git a/tests/test-mbrtowc-w32-3.sh b/tests/test-mbrtowc-w32-3.sh index c49f4bdf..c55a0ec0 100755 --- a/tests/test-mbrtowc-w32-3.sh +++ b/tests/test-mbrtowc-w32-3.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a CP932 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} Japanese_Japan 932 +# Test a CP1256 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 diff --git a/tests/test-mbrtowc-w32-4.sh b/tests/test-mbrtowc-w32-4.sh index 3e786150..2c5d555f 100755 --- a/tests/test-mbrtowc-w32-4.sh +++ b/tests/test-mbrtowc-w32-4.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a CP950 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_Taiwan 950 +# Test some UTF-8 locales. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 diff --git a/tests/test-mbrtowc-w32-5.sh b/tests/test-mbrtowc-w32-5.sh index c6ba2226..c49f4bdf 100755 --- a/tests/test-mbrtowc-w32-5.sh +++ b/tests/test-mbrtowc-w32-5.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a CP936 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 936 +# Test a CP932 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} Japanese_Japan 932 diff --git a/tests/test-mbrtowc-w32-6.sh b/tests/test-mbrtowc-w32-6.sh index c2e8dfe0..3e786150 100755 --- a/tests/test-mbrtowc-w32-6.sh +++ b/tests/test-mbrtowc-w32-6.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a GB18030 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 54936 +# Test a CP950 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_Taiwan 950 diff --git a/tests/test-mbrtowc-w32-7.sh b/tests/test-mbrtowc-w32-7.sh index 2c5d555f..c6ba2226 100755 --- a/tests/test-mbrtowc-w32-7.sh +++ b/tests/test-mbrtowc-w32-7.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test some UTF-8 locales. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 +# Test a CP936 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 936 diff --git a/tests/test-mbrtowc-w32-8.sh b/tests/test-mbrtowc-w32-8.sh new file mode 100755 index 00000000..c2e8dfe0 --- /dev/null +++ b/tests/test-mbrtowc-w32-8.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a GB18030 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 54936 diff --git a/tests/test-mbrtowc-w32.c b/tests/test-mbrtowc-w32.c index 04287e98..2071ddeb 100644 --- a/tests/test-mbrtowc-w32.c +++ b/tests/test-mbrtowc-w32.c @@ -1,5 +1,5 @@ /* Test of conversion of multibyte character to wide character. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -265,6 +265,126 @@ test_one_locale (const char *name, int codepage) } return 0; + case 65001: + /* Locale encoding is CP65001 = UTF-8. */ + if (strcmp (locale_charset (), "UTF-8") != 0) + return 77; + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 5, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (wc == 0x00FC); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + /* Test support of NULL first argument. */ + ret = mbrtowc (NULL, input + 3, 4, &state); + ASSERT (ret == 2); + ASSERT (mbsinit (&state)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 4, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (wc == 0x00DF); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 5, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 6, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + + /* Test some invalid input. */ + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\303\300", 2, &state); /* 0xC3 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\343\300", 2, &state); /* 0xE3 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\343\300\200", 3, &state); /* 0xE3 0xC0 0x80 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\343\200\300", 3, &state); /* 0xE3 0x80 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\363\300", 2, &state); /* 0xF3 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\363\300\200\200", 4, &state); /* 0xF3 0xC0 0x80 0x80 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\363\200\300", 3, &state); /* 0xF3 0x80 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\363\200\300\200", 4, &state); /* 0xF3 0x80 0xC0 0x80 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "\363\200\200\300", 4, &state); /* 0xF3 0x80 0x80 0xC0 */ + ASSERT (ret == (size_t)-1); + ASSERT (errno == EILSEQ); + } + return 0; + case 932: /* Locale encoding is CP932, similar to Shift_JIS. */ { @@ -573,126 +693,6 @@ test_one_locale (const char *name, int codepage) } return 0; - case 65001: - /* Locale encoding is CP65001 = UTF-8. */ - if (strcmp (locale_charset (), "UTF-8") != 0) - return 77; - { - char input[] = "B\303\274\303\237er"; /* "Büßer" */ - memset (&state, '\0', sizeof (mbstate_t)); - - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, input, 1, &state); - ASSERT (ret == 1); - ASSERT (wc == 'B'); - ASSERT (mbsinit (&state)); - input[0] = '\0'; - - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, input + 1, 1, &state); - ASSERT (ret == (size_t)(-2)); - ASSERT (wc == (wchar_t) 0xBADFACE); - ASSERT (!mbsinit (&state)); - input[1] = '\0'; - - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, input + 2, 5, &state); - ASSERT (ret == 1); - ASSERT (wctob (wc) == EOF); - ASSERT (wc == 0x00FC); - ASSERT (mbsinit (&state)); - input[2] = '\0'; - - /* Test support of NULL first argument. */ - ret = mbrtowc (NULL, input + 3, 4, &state); - ASSERT (ret == 2); - ASSERT (mbsinit (&state)); - - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, input + 3, 4, &state); - ASSERT (ret == 2); - ASSERT (wctob (wc) == EOF); - ASSERT (wc == 0x00DF); - ASSERT (mbsinit (&state)); - input[3] = '\0'; - input[4] = '\0'; - - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, input + 5, 2, &state); - ASSERT (ret == 1); - ASSERT (wc == 'e'); - ASSERT (mbsinit (&state)); - input[5] = '\0'; - - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, input + 6, 1, &state); - ASSERT (ret == 1); - ASSERT (wc == 'r'); - ASSERT (mbsinit (&state)); - - /* Test some invalid input. */ - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\303\300", 2, &state); /* 0xC3 0xC0 */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\343\300", 2, &state); /* 0xE3 0xC0 */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\343\300\200", 3, &state); /* 0xE3 0xC0 0x80 */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\343\200\300", 3, &state); /* 0xE3 0x80 0xC0 */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\363\300", 2, &state); /* 0xF3 0xC0 */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\363\300\200\200", 4, &state); /* 0xF3 0xC0 0x80 0x80 */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\363\200\300", 3, &state); /* 0xF3 0x80 0xC0 */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\363\200\300\200", 4, &state); /* 0xF3 0x80 0xC0 0x80 */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - - memset (&state, '\0', sizeof (mbstate_t)); - wc = (wchar_t) 0xBADFACE; - ret = mbrtowc (&wc, "\363\200\200\300", 4, &state); /* 0xF3 0x80 0x80 0xC0 */ - ASSERT (ret == (size_t)-1); - ASSERT (errno == EILSEQ); - } - return 0; - default: return 1; } diff --git a/tests/test-mbrtowc.c b/tests/test-mbrtowc.c index 0e86bd49..f45f90e4 100644 --- a/tests/test-mbrtowc.c +++ b/tests/test-mbrtowc.c @@ -1,5 +1,5 @@ /* Test of conversion of multibyte character to wide character. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,6 +26,7 @@ SIGNATURE_CHECK (mbrtowc, size_t, (wchar_t *, char const *, size_t, #include <locale.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include "macros.h" @@ -72,10 +73,6 @@ main (int argc, char *argv[]) for (c = 0; c < 0x100; c++) switch (c) { - default: - if (! (c && 1 < argc && argv[1][0] == '5')) - break; - FALLTHROUGH; case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': @@ -97,25 +94,23 @@ main (int argc, char *argv[]) case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': - /* c is in the ISO C "basic character set", or argv[1] starts - with '5' so we are testing all nonnull bytes. */ + /* c is in the ISO C "basic character set". */ + ASSERT (c < 0x80); + /* c is an ASCII character. */ buf[0] = c; + wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, buf, 1, &state); ASSERT (ret == 1); - if (c < 0x80) - /* c is an ASCII character. */ - ASSERT (wc == c); - else - /* argv[1] starts with '5', that is, we are testing the C or POSIX - locale. - On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. - But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ - ASSERT (wc == (btowc (c) == 0xDF00 + c ? btowc (c) : c)); + ASSERT (wc == c); ASSERT (mbsinit (&state)); + ret = mbrtowc (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); + + break; + default: break; } } @@ -130,10 +125,53 @@ main (int argc, char *argv[]) ASSERT (mbsinit (&state)); } +#ifdef __ANDROID__ + /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the + "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" + locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, + that is, effectively the "C.UTF-8" locale. */ + if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) + argv[1] = "3"; +#endif + if (argc > 1) switch (argv[1][0]) { case '1': + /* C or POSIX locale. */ + { + int c; + char buf[1]; + + memset (&state, '\0', sizeof (mbstate_t)); + for (c = 0; c < 0x100; c++) + if (c != 0) + { + /* We are testing all nonnull bytes. */ + buf[0] = c; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, buf, 1, &state); + /* POSIX:2018 says: "In the POSIX locale an [EILSEQ] error + cannot occur since all byte values are valid characters." */ + ASSERT (ret == 1); + if (c < 0x80) + /* c is an ASCII character. */ + ASSERT (wc == c); + else + /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. + But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ + ASSERT (wc == (btowc (c) == 0xDF00 + c ? btowc (c) : c)); + ASSERT (mbsinit (&state)); + + ret = mbrtowc (NULL, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + } + } + return 0; + + case '2': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { char input[] = "B\374\337er"; /* "Büßer" */ @@ -180,7 +218,7 @@ main (int argc, char *argv[]) } return 0; - case '2': + case '3': /* Locale encoding is UTF-8. */ { char input[] = "B\303\274\303\237er"; /* "Büßer" */ @@ -235,7 +273,7 @@ main (int argc, char *argv[]) } return 0; - case '3': + case '4': /* Locale encoding is EUC-JP. */ { char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ @@ -291,7 +329,7 @@ main (int argc, char *argv[]) } return 0; - case '4': + case '5': /* Locale encoding is GB18030. */ { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ @@ -347,10 +385,6 @@ main (int argc, char *argv[]) ASSERT (mbsinit (&state)); } return 0; - - case '5': - /* C locale; tested above. */ - return 0; } return 1; diff --git a/tests/test-mbrtowc5.sh b/tests/test-mbrtowc5.sh deleted file mode 100755 index 490496de..00000000 --- a/tests/test-mbrtowc5.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# Test whether the POSIX locale has encoding errors. -LC_ALL=C \ -${CHECKER} ./test-mbrtowc${EXEEXT} 5 || exit -LC_ALL=POSIX \ -${CHECKER} ./test-mbrtowc${EXEEXT} 5 diff --git a/tests/test-mbsinit.c b/tests/test-mbsinit.c index 699701eb..0250894d 100644 --- a/tests/test-mbsinit.c +++ b/tests/test-mbsinit.c @@ -1,5 +1,5 @@ /* Test of test for initial conversion state. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-memchr.c b/tests/test-memchr.c index 8a2d3de4..c43ce9ff 100644 --- a/tests/test-memchr.c +++ b/tests/test-memchr.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2022 Free Software Foundation, Inc. + * Copyright (C) 2008-2024 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This program is free software: you can redistribute it and/or modify diff --git a/tests/test-nanosleep.c b/tests/test-nanosleep.c index c2081615..c3953843 100644 --- a/tests/test-nanosleep.c +++ b/tests/test-nanosleep.c @@ -1,5 +1,5 @@ /* Test of nanosleep() function. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-netinet_in.c b/tests/test-netinet_in.c index 3bc110e5..6842821e 100644 --- a/tests/test-netinet_in.c +++ b/tests/test-netinet_in.c @@ -1,5 +1,5 @@ /* Test of <netinet/in.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-once.c b/tests/test-once.c index 5efe7c4a..70f54c02 100644 --- a/tests/test-once.c +++ b/tests/test-once.c @@ -1,5 +1,5 @@ /* Test of once-only execution in multithreaded situations. - Copyright (C) 2018-2022 Free Software Foundation, Inc. + Copyright (C) 2018-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-open.c b/tests/test-open.c index d7c5a086..52e72be9 100644 --- a/tests/test-open.c +++ b/tests/test-open.c @@ -1,5 +1,5 @@ /* Test of opening a file descriptor. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-open.h b/tests/test-open.h index 0da20a17..05764356 100644 --- a/tests/test-open.h +++ b/tests/test-open.h @@ -1,5 +1,5 @@ /* Test of opening a file descriptor. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,6 +16,11 @@ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ +/* Tell GCC not to warn about the specific edge cases tested here. */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +#endif + /* Make test_open always inline if we're using Fortify, which defines __always_inline to do that. Do nothing otherwise. This works around a glibc bug whereby 'open' cannot be used as a function diff --git a/tests/test-pathmax.c b/tests/test-pathmax.c index 5f1f9cc2..a80ee065 100644 --- a/tests/test-pathmax.c +++ b/tests/test-pathmax.c @@ -1,5 +1,5 @@ /* Test of "pathmax.h". - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-perror.c b/tests/test-perror.c index e1ab3d6b..aba12fa1 100644 --- a/tests/test-perror.c +++ b/tests/test-perror.c @@ -1,5 +1,5 @@ /* Test of perror() function. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-perror2.c b/tests/test-perror2.c index f1eb5110..edf1d15f 100644 --- a/tests/test-perror2.c +++ b/tests/test-perror2.c @@ -1,5 +1,5 @@ /* Test of perror() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,6 +22,11 @@ #include <string.h> #include <unistd.h> +/* Tell GCC not to warn about myerr being leaked. */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +#endif + /* This test intentionally parses stderr. So, we arrange to have fd 10 (outside the range of interesting fd's during the test) set up to duplicate the original stderr. */ diff --git a/tests/test-pipe.c b/tests/test-pipe.c index 0525f7d4..e9ebe162 100644 --- a/tests/test-pipe.c +++ b/tests/test-pipe.c @@ -1,5 +1,5 @@ /* Test of pipe. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-printf-frexp.c b/tests/test-printf-frexp.c index 01b34a51..e3aa7caf 100644 --- a/tests/test-printf-frexp.c +++ b/tests/test-printf-frexp.c @@ -1,5 +1,5 @@ /* Test of splitting a double into fraction and mantissa. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-printf-frexpl.c b/tests/test-printf-frexpl.c index bc30fd1b..dd39fe84 100644 --- a/tests/test-printf-frexpl.c +++ b/tests/test-printf-frexpl.c @@ -1,5 +1,5 @@ /* Test of splitting a 'long double' into fraction and mantissa. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-pselect.c b/tests/test-pselect.c index 898578be..2f239ddf 100644 --- a/tests/test-pselect.c +++ b/tests/test-pselect.c @@ -1,5 +1,5 @@ /* Test of pselect() substitute. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ SIGNATURE_CHECK (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); +#define TEST_PORT 12347 #include "test-select.h" static int diff --git a/tests/test-pthread-thread.c b/tests/test-pthread-thread.c index 3c08084d..f0a19793 100644 --- a/tests/test-pthread-thread.c +++ b/tests/test-pthread-thread.c @@ -1,5 +1,5 @@ /* Test of pthread_create () function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ static pthread_t worker_thread; static volatile int work_done; static void * -worker_thread_func (void *arg) +worker_thread_func (_GL_UNUSED void *arg) { work_done = 1; return MAGIC; diff --git a/tests/test-pthread.c b/tests/test-pthread.c index 2fef5924..f7e89c66 100644 --- a/tests/test-pthread.c +++ b/tests/test-pthread.c @@ -1,5 +1,5 @@ /* Test of <pthread.h> substitute. - Copyright (C) 2019-2022 Free Software Foundation, Inc. + Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-pthread_sigmask1.c b/tests/test-pthread_sigmask1.c index a7816b5e..a4f9ba6d 100644 --- a/tests/test-pthread_sigmask1.c +++ b/tests/test-pthread_sigmask1.c @@ -1,5 +1,5 @@ /* Test of pthread_sigmask in a single-threaded program. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ SIGNATURE_CHECK (pthread_sigmask, int, (int, const sigset_t *, sigset_t *)); #include <errno.h> +#include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -35,16 +36,16 @@ SIGNATURE_CHECK (pthread_sigmask, int, (int, const sigset_t *, sigset_t *)); static volatile int sigint_occurred; static void -sigint_handler (int sig) +sigint_handler (_GL_UNUSED int sig) { sigint_occurred++; } int -main (int argc, char *argv[]) +main () { sigset_t set; - int pid = getpid (); + intmax_t pid = getpid (); char command[80]; signal (SIGINT, sigint_handler); @@ -59,7 +60,7 @@ main (int argc, char *argv[]) ASSERT (pthread_sigmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from outside. */ - sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, pid); + sprintf (command, "sh -c 'sleep 1; kill -INT %"PRIdMAX"' &", pid); ASSERT (system (command) == 0); /* Wait. */ diff --git a/tests/test-pthread_sigmask2.c b/tests/test-pthread_sigmask2.c index 20349fe0..d527eb8d 100644 --- a/tests/test-pthread_sigmask2.c +++ b/tests/test-pthread_sigmask2.c @@ -1,5 +1,5 @@ /* Test of pthread_sigmask in a multi-threaded program. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ static pthread_t main_thread; static pthread_t killer_thread; static void * -killer_thread_func (void *arg) +killer_thread_func (_GL_UNUSED void *arg) { sleep (1); pthread_kill (main_thread, SIGINT); @@ -43,13 +43,13 @@ killer_thread_func (void *arg) static volatile int sigint_occurred; static void -sigint_handler (int sig) +sigint_handler (_GL_UNUSED int sig) { sigint_occurred++; } int -main (int argc, char *argv[]) +main () { sigset_t set; diff --git a/tests/test-raise.c b/tests/test-raise.c index b1a3c8a4..39ffdc30 100644 --- a/tests/test-raise.c +++ b/tests/test-raise.c @@ -1,5 +1,5 @@ /* Test raising a signal. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,11 +26,11 @@ SIGNATURE_CHECK (raise, int, (int)); #include "macros.h" -/* It is safe to use _Noreturn here: exit() never returns, and GCC knows that - exit() is a non-returning function, even on platforms where its declaration - in <stdlib.h> does not have the 'noreturn' attribute. */ +/* It is safe to use _Noreturn here: _exit() never returns, and GCC knows that + _exit() is a non-returning function, even on platforms where its declaration + in <unistd.h> does not have the 'noreturn' attribute. */ static _Noreturn void -handler (int sig) +handler (_GL_UNUSED int sig) { _exit (0); } diff --git a/tests/test-random-mt.c b/tests/test-random-mt.c new file mode 100644 index 00000000..4e2f2d37 --- /dev/null +++ b/tests/test-random-mt.c @@ -0,0 +1,169 @@ +/* Multithread-safety test for random(). + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023. */ + +#include <config.h> + +#if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS + +/* Whether to help the scheduler through explicit yield(). + Uncomment this to see if the operating system has a fair scheduler. */ +#define EXPLICIT_YIELD 1 + +/* Number of simultaneous threads. */ +#define THREAD_COUNT 4 + +/* Number of random() invocations operations performed in each thread. + This value is chosen so that the unit test terminates quickly. + To reliably determine whether a random() implementation is multithread-safe, + set REPEAT_COUNT to 1000000 and run the test 100 times: + $ for i in `seq 100`; do ./test-random-mt; done + */ +#define REPEAT_COUNT 100000 + +/* Specification. */ +#include <stdlib.h> + +#include <stdio.h> + +#if EXPLICIT_YIELD +# include <sched.h> +#endif + +#include "glthread/thread.h" +#include "xalloc.h" + +#if EXPLICIT_YIELD +# define yield() sched_yield () +#else +# define yield() +#endif + +/* This test runs REPEAT_COUNT invocations of random() in each thread and stores + the result, then compares the first REPEAT_COUNT among these + THREAD_COUNT * REPEAT_COUNT + random numbers against a precomputed sequence with the same seed. */ + +static void * +random_invocator_thread (void *arg) +{ + long *storage = (long *) arg; + int repeat; + + for (repeat = 0; repeat < REPEAT_COUNT; repeat++) + { + storage[repeat] = random (); + yield (); + } + + return NULL; +} + +int +main () +{ + unsigned int seed = 19891109; + + /* First, get the expected sequence of random() results. */ + srandom (seed); + long *expected = XNMALLOC (REPEAT_COUNT, long); + { + int repeat; + for (repeat = 0; repeat < REPEAT_COUNT; repeat++) + expected[repeat] = random (); + } + + /* Then, run REPEAT_COUNT invocations of random() each, in THREAD_COUNT + separate threads. */ + gl_thread_t threads[THREAD_COUNT]; + long *thread_results[THREAD_COUNT]; + srandom (seed); + { + int i; + for (i = 0; i < THREAD_COUNT; i++) + thread_results[i] = XNMALLOC (REPEAT_COUNT, long); + for (i = 0; i < THREAD_COUNT; i++) + threads[i] = + gl_thread_create (random_invocator_thread, thread_results[i]); + } + + /* Wait for the threads to terminate. */ + { + int i; + for (i = 0; i < THREAD_COUNT; i++) + gl_thread_join (threads[i], NULL); + } + + /* Finally, determine whether the threads produced the same sequence of + random() results. */ + { + int expected_index; + int result_index[THREAD_COUNT]; + int i; + + for (i = 0; i < THREAD_COUNT; i++) + result_index[i] = 0; + + for (expected_index = 0; expected_index < REPEAT_COUNT; expected_index++) + { + long expected_value = expected[expected_index]; + + for (i = 0; i < THREAD_COUNT; i++) + { + if (thread_results[i][result_index[i]] == expected_value) + { + result_index[i]++; + break; + } + } + if (i == THREAD_COUNT) + { + if (expected_index == 0) + { + /* This occurs on platforms like OpenBSD, where srandom() has no + effect and random() always return non-deterministic values. + Mark the test as SKIP. */ + fprintf (stderr, "Skipping test: random() is non-deterministic.\n"); + return 77; + } + else + { + fprintf (stderr, "Expected value #%d not found in multithreaded results.\n", + expected_index); + return 1; + } + } + } + } + + return 0; +} + +#else + +/* No multithreading available. */ + +#include <stdio.h> + +int +main () +{ + fputs ("Skipping test: multithreading not enabled\n", stderr); + return 77; +} + +#endif diff --git a/tests/test-random.c b/tests/test-random.c new file mode 100644 index 00000000..4bfc1b84 --- /dev/null +++ b/tests/test-random.c @@ -0,0 +1,49 @@ +/* Test random. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <stdlib.h> + +#include "signature.h" +SIGNATURE_CHECK (srandom, void, (unsigned int)); +SIGNATURE_CHECK (initstate, char *, (unsigned int, char *, size_t)); +SIGNATURE_CHECK (setstate, char *, (char *)); +SIGNATURE_CHECK (random, long, (void)); + +#include <time.h> + +#include "macros.h" + +int +main () +{ + char buf[128]; + unsigned int i; + unsigned int n_big = 0; + + initstate (time (NULL), buf, sizeof buf); + for (i = 0; i < 1000; i++) + { + long r = random (); + ASSERT (0 <= r); + if (RAND_MAX / 2 < r) + ++n_big; + } + + /* Fail if none of the numbers were larger than RAND_MAX / 2. */ + return !n_big; +} diff --git a/tests/test-random_r.c b/tests/test-random_r.c new file mode 100644 index 00000000..19f570d7 --- /dev/null +++ b/tests/test-random_r.c @@ -0,0 +1,68 @@ +/* Test random_r. + Copyright (C) 2008-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <stdlib.h> + +#include "signature.h" +SIGNATURE_CHECK (srandom_r, int, (unsigned int, struct random_data *)); +SIGNATURE_CHECK (initstate_r, int, (unsigned int, char *, size_t, + struct random_data *)); +SIGNATURE_CHECK (setstate_r, int, (char *, struct random_data *)); +SIGNATURE_CHECK (random_r, int, (struct random_data *, int32_t *)); + +#include <time.h> + +#include "macros.h" + +/* Note: This test crashes on glibc/SPARC systems. + Reported at <https://sourceware.org/bugzilla/show_bug.cgi?id=30584>. */ + +static int +test_failed (int alignment) +{ + struct random_data rand_state; + char buf[128 + sizeof (int32_t)]; + unsigned int i; + unsigned int n_big = 0; + + rand_state.state = NULL; + if (initstate_r (time (NULL), buf + alignment, sizeof buf - alignment, + &rand_state)) + return 1; + for (i = 0; i < 1000; i++) + { + int32_t r; + ASSERT (random_r (&rand_state, &r) == 0); + ASSERT (0 <= r); + if (RAND_MAX / 2 < r) + ++n_big; + } + + /* Fail if none of the numbers were larger than RAND_MAX / 2. */ + return !n_big; +} + +int +main () +{ + int alignment; + for (alignment = 0; alignment < sizeof (int32_t); alignment++) + if (test_failed (alignment)) + return 1; + return 0; +} diff --git a/tests/test-realloc-gnu.c b/tests/test-realloc-gnu.c index c3bca67a..54832ee8 100644 --- a/tests/test-realloc-gnu.c +++ b/tests/test-realloc-gnu.c @@ -1,5 +1,5 @@ /* Test of realloc function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ #include "macros.h" int -main (int argc, char **argv) +main (int argc, _GL_UNUSED char **argv) { /* Check that realloc (NULL, 0) is not a NULL pointer. */ void *volatile p = realloc (NULL, 0); diff --git a/tests/test-reallocarray.c b/tests/test-reallocarray.c index b830361d..fb9171ce 100644 --- a/tests/test-reallocarray.c +++ b/tests/test-reallocarray.c @@ -1,5 +1,5 @@ /* Test of reallocarray function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-rwlock1.c b/tests/test-rwlock1.c index a9c0aa53..4275382c 100644 --- a/tests/test-rwlock1.c +++ b/tests/test-rwlock1.c @@ -1,5 +1,5 @@ /* Test of glthread_rwlock_rdlock function. - Copyright (C) 2017-2022 Free Software Foundation, Inc. + Copyright (C) 2017-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -73,7 +73,7 @@ static gl_thread_t timer; static gl_lock_t baton; static void * -timer_func (void *ignored) +timer_func (_GL_UNUSED void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure @@ -87,7 +87,7 @@ timer_func (void *ignored) } static void * -reader2_func (void *ignored) +reader2_func (_GL_UNUSED void *ignored) { int err; @@ -113,7 +113,7 @@ reader2_func (void *ignored) } static void * -writer_func (void *ignored) +writer_func (_GL_UNUSED void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ diff --git a/tests/test-sched.c b/tests/test-sched.c index 1326815b..afefc7d5 100644 --- a/tests/test-sched.c +++ b/tests/test-sched.c @@ -1,5 +1,5 @@ /* Test of <sched.h> substitute. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-select-fd.c b/tests/test-select-fd.c index 90699867..b94addd5 100644 --- a/tests/test-select-fd.c +++ b/tests/test-select-fd.c @@ -1,5 +1,5 @@ /* Test of select() substitute, reading or writing from a given file descriptor. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-select-in.sh b/tests/test-select-in.sh index 68176d30..ad86ea25 100755 --- a/tests/test-select-in.sh +++ b/tests/test-select-in.sh @@ -5,7 +5,7 @@ # of /dev/null. tmpfiles="" -trap 'rm -fr $tmpfiles' 1 2 3 15 +trap 'rm -fr $tmpfiles' HUP INT QUIT TERM tmpfiles="$tmpfiles t-select-in.tmp" diff --git a/tests/test-select-out.sh b/tests/test-select-out.sh index dbeace50..cfa5e179 100755 --- a/tests/test-select-out.sh +++ b/tests/test-select-out.sh @@ -2,7 +2,7 @@ # Test select() on file descriptors opened for writing. tmpfiles="" -trap 'rm -fr $tmpfiles' 1 2 3 15 +trap 'rm -fr $tmpfiles' HUP INT QUIT TERM tmpfiles="$tmpfiles t-select-out.out t-select-out.tmp" diff --git a/tests/test-select-stdin.c b/tests/test-select-stdin.c index bf7e82b3..2f8f08aa 100644 --- a/tests/test-select-stdin.c +++ b/tests/test-select-stdin.c @@ -1,5 +1,5 @@ /* Test of select() substitute, reading from stdin. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-select.c b/tests/test-select.c index 7cca5517..a75c9244 100644 --- a/tests/test-select.c +++ b/tests/test-select.c @@ -1,5 +1,5 @@ /* Test of select() substitute. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,6 +25,7 @@ SIGNATURE_CHECK (select, int, (int, fd_set *, fd_set *, fd_set *, struct timeval *)); +#define TEST_PORT 12346 #include "test-select.h" int diff --git a/tests/test-select.h b/tests/test-select.h index 86a79ad8..4896b674 100644 --- a/tests/test-select.h +++ b/tests/test-select.h @@ -1,5 +1,5 @@ /* Test of select() substitute. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,8 +37,10 @@ # include <sys/wait.h> #endif -#define TEST_PORT 12345 - +/* Tell GCC not to warn about the specific edge cases tested here. */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-use-without-check" +#endif typedef int (*select_fn) (int, fd_set *, fd_set *, fd_set *, struct timeval *); diff --git a/tests/test-setenv.c b/tests/test-setenv.c index 2362c2e1..3b2850e4 100644 --- a/tests/test-setenv.c +++ b/tests/test-setenv.c @@ -1,5 +1,5 @@ /* Tests of setenv. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-setlocale1.c b/tests/test-setlocale1.c index 6e50e657..329991b3 100644 --- a/tests/test-setlocale1.c +++ b/tests/test-setlocale1.c @@ -1,5 +1,5 @@ /* Test of setting the current locale. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-setlocale2.c b/tests/test-setlocale2.c index 905c1939..b64b64ca 100644 --- a/tests/test-setlocale2.c +++ b/tests/test-setlocale2.c @@ -1,5 +1,5 @@ /* Test of setting the current locale. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-setlocale_null-mt-all.c b/tests/test-setlocale_null-mt-all.c index 2739f111..d565aa03 100644 --- a/tests/test-setlocale_null-mt-all.c +++ b/tests/test-setlocale_null-mt-all.c @@ -1,5 +1,5 @@ /* Multithread-safety test for setlocale_null_r (LC_ALL, ...). - Copyright (C) 2019-2022 Free Software Foundation, Inc. + Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -166,7 +166,7 @@ Solaris 11.0 OK Solaris 11.4 OK Solaris OpenIndiana OK Haiku crash < 1 sec -Cygwin crash < 1 sec +Cygwin < 3.4.6 crash < 1 sec mingw OK MSVC OK (assuming compiler option /MD !) */ diff --git a/tests/test-setlocale_null-mt-one.c b/tests/test-setlocale_null-mt-one.c index 9320efd6..cbd057f9 100644 --- a/tests/test-setlocale_null-mt-one.c +++ b/tests/test-setlocale_null-mt-one.c @@ -1,5 +1,5 @@ /* Multithread-safety test for setlocale_null_r (LC_xxx, ...). - Copyright (C) 2019-2022 Free Software Foundation, Inc. + Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-setlocale_null-unlocked.c b/tests/test-setlocale_null-unlocked.c new file mode 100644 index 00000000..d06dec60 --- /dev/null +++ b/tests/test-setlocale_null-unlocked.c @@ -0,0 +1,35 @@ +/* Test of setlocale_null_r_unlocked function. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019. */ + +#include <config.h> + +/* Specification. */ +#include "setlocale_null.h" + +#include <locale.h> + +/* Check that SETLOCALE_NULL_ALL_MAX is a constant expression. */ +static char buf[SETLOCALE_NULL_ALL_MAX]; + +int +main () +{ + /* Check that setlocale_null_r_unlocked() can be used without any + libraries. */ + return setlocale_null_r_unlocked (LC_ALL, buf, sizeof (buf)) != 0; +} diff --git a/tests/test-setlocale_null.c b/tests/test-setlocale_null.c index 9b8a663a..72352348 100644 --- a/tests/test-setlocale_null.c +++ b/tests/test-setlocale_null.c @@ -1,5 +1,5 @@ /* Test of setlocale_null_r function. - Copyright (C) 2019-2022 Free Software Foundation, Inc. + Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,6 +27,6 @@ static char buf[SETLOCALE_NULL_ALL_MAX]; int main () { - /* Check that setlocale_null_r() can be used with $(LIB_SETLOCALE_NULL). */ + /* Check that setlocale_null_r() can be used with $(SETLOCALE_NULL_LIB). */ return setlocale_null_r (LC_ALL, buf, sizeof (buf)) != 0; } diff --git a/tests/test-setsockopt.c b/tests/test-setsockopt.c index 03376848..75493810 100644 --- a/tests/test-setsockopt.c +++ b/tests/test-setsockopt.c @@ -1,5 +1,5 @@ /* Test setsockopt() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-signal-h.c b/tests/test-signal-h.c index 06c97274..c4b32207 100644 --- a/tests/test-signal-h.c +++ b/tests/test-signal-h.c @@ -1,5 +1,5 @@ /* Test of <signal.h> substitute. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-signbit.c b/tests/test-signbit.c index d1305ce0..da5b7981 100644 --- a/tests/test-signbit.c +++ b/tests/test-signbit.c @@ -1,5 +1,5 @@ /* Test of signbit() substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,6 +30,8 @@ #include "minus-zero.h" #include "infinity.h" +#include "signed-nan.h" +#include "signed-snan.h" #include "macros.h" float zerof = 0.0f; @@ -56,28 +58,12 @@ test_signbitf () ASSERT (!signbit (Infinityf ())); ASSERT (signbit (- Infinityf ())); /* Quiet NaN. */ - (void) signbit (zerof / zerof); -#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + ASSERT (!signbit (positive_NaNf ())); + ASSERT (signbit (negative_NaNf ())); +#if HAVE_SNANF /* Signalling NaN. */ - { - #define NWORDS \ - ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - typedef union { float value; unsigned int word[NWORDS]; } memory_float; - memory_float m; - m.value = zerof / zerof; -# if FLT_EXPBIT0_BIT > 0 - m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); -# else - m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif - if (FLT_EXPBIT0_WORD < NWORDS / 2) - m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; - else - m.word[0] |= (unsigned int) 1; - (void) signbit (m.value); - #undef NWORDS - } + ASSERT (!signbit (positive_SNaNf ())); + ASSERT (signbit (negative_SNaNf ())); #endif } @@ -101,26 +87,12 @@ test_signbitd () ASSERT (!signbit (Infinityd ())); ASSERT (signbit (- Infinityd ())); /* Quiet NaN. */ - (void) signbit (zerod / zerod); -#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + ASSERT (!signbit (positive_NaNd ())); + ASSERT (signbit (negative_NaNd ())); +#if HAVE_SNAND /* Signalling NaN. */ - { - #define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - typedef union { double value; unsigned int word[NWORDS]; } memory_double; - memory_double m; - m.value = zerod / zerod; -# if DBL_EXPBIT0_BIT > 0 - m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); -# else - m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif - m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - |= (unsigned int) 1 << DBL_EXPBIT0_BIT; - (void) signbit (m.value); - #undef NWORDS - } + ASSERT (!signbit (positive_SNaNd ())); + ASSERT (signbit (negative_SNaNd ())); #endif } @@ -144,36 +116,12 @@ test_signbitl () ASSERT (!signbit (Infinityl ())); ASSERT (signbit (- Infinityl ())); /* Quiet NaN. */ - (void) signbit (zerol / zerol); -#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT + ASSERT (!signbit (positive_NaNl ())); + ASSERT (signbit (negative_NaNl ())); +#if HAVE_SNANL /* Signalling NaN. */ - { - #define NWORDS \ - ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; - -#if defined __powerpc__ && LDBL_MANT_DIG == 106 - /* This is PowerPC "double double", a pair of two doubles. Inf and Nan are - represented as the corresponding 64-bit IEEE values in the first double; - the second is ignored. Manipulate only the first double. */ - #undef NWORDS - #define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -#endif - - memory_long_double m; - m.value = zerol / zerol; -# if LDBL_EXPBIT0_BIT > 0 - m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); -# else - m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif - m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] - |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; - (void) signbit (m.value); - #undef NWORDS - } + ASSERT (!signbit (positive_SNaNl ())); + ASSERT (signbit (negative_SNaNl ())); #endif } diff --git a/tests/test-sigprocmask.c b/tests/test-sigprocmask.c index 4bab4c1c..c712d77d 100644 --- a/tests/test-sigprocmask.c +++ b/tests/test-sigprocmask.c @@ -1,5 +1,5 @@ /* Test of sigprocmask. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ SIGNATURE_CHECK (sigprocmask, int, (int, const sigset_t *, sigset_t *)); #include <errno.h> +#include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -35,24 +36,18 @@ SIGNATURE_CHECK (sigprocmask, int, (int, const sigset_t *, sigset_t *)); static volatile int sigint_occurred; static void -sigint_handler (int sig) +sigint_handler (_GL_UNUSED int sig) { sigint_occurred++; } int -main (int argc, char *argv[]) +main () { sigset_t set; - pid_t pid = getpid (); + intmax_t pid = getpid (); char command[80]; - if (sizeof (int) < sizeof pid && 0x7fffffff < pid) - { - fputs ("Skipping test: pid too large\n", stderr); - return 77; - } - signal (SIGINT, sigint_handler); sigemptyset (&set); @@ -66,7 +61,7 @@ main (int argc, char *argv[]) ASSERT (sigprocmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from outside. */ - sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, (int) pid); + sprintf (command, "sh -c 'sleep 1; kill -INT %"PRIdMAX"' &", pid); ASSERT (system (command) == 0); /* Wait. */ diff --git a/tests/test-sleep.c b/tests/test-sleep.c index 37af3525..b0896f2e 100644 --- a/tests/test-sleep.c +++ b/tests/test-sleep.c @@ -1,5 +1,5 @@ /* Test of sleep() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-sockets.c b/tests/test-sockets.c index 714da6c0..5917e4dd 100644 --- a/tests/test-sockets.c +++ b/tests/test-sockets.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2022 Free Software Foundation, Inc. + * Copyright (C) 2008-2024 Free Software Foundation, Inc. * Written by Simon Josefsson. * * This program is free software: you can redistribute it and/or modify diff --git a/tests/test-stat-time.c b/tests/test-stat-time.c index 7e961f2f..f28b6c46 100644 --- a/tests/test-stat-time.c +++ b/tests/test-stat-time.c @@ -1,5 +1,5 @@ /* Test of <stat-time.h>. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-stat.c b/tests/test-stat.c index c8a4b984..53ff77d9 100644 --- a/tests/test-stat.c +++ b/tests/test-stat.c @@ -1,5 +1,5 @@ /* Tests of stat. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-stat.h b/tests/test-stat.h index 82f88970..a76f38f9 100644 --- a/tests/test-stat.h +++ b/tests/test-stat.h @@ -1,5 +1,5 @@ /* Tests of stat. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,16 +33,16 @@ test_stat_func (int (*func) (char const *, struct stat *), bool print) ASSERT (func (".", &st1) == 0); ASSERT (func ("./", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) - ASSERT (SAME_INODE (st1, st2)); + ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (func (cwd, &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) - ASSERT (SAME_INODE (st1, st2)); + ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (func ("/", &st1) == 0); ASSERT (func ("///", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) - ASSERT (SAME_INODE (st1, st2)); + ASSERT (psame_inode (&st1, &st2)); #endif errno = 0; diff --git a/tests/test-stdbool.c b/tests/test-stdbool.c index 923a2cd3..9322b500 100644 --- a/tests/test-stdbool.c +++ b/tests/test-stdbool.c @@ -1,5 +1,5 @@ /* Test bool. - Copyright (C) 2002-2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2002-2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -48,7 +48,7 @@ least, not for all compilers and compiler options. */ #if ((HAVE_C_BOOL || defined __cplusplus \ || HAVE_STDBOOL_H || 3 <= __GNUC__ || 4 <= __clang_major__) \ - && !defined _MSC_VER) + && !(defined _MSC_VER || defined __SUNPRO_C)) # define WORKING_BOOL 1 #else # define WORKING_BOOL 0 diff --git a/tests/test-stdckdint.c b/tests/test-stdckdint.c index c1952551..f0a576f6 100644 --- a/tests/test-stdckdint.c +++ b/tests/test-stdckdint.c @@ -1,5 +1,5 @@ /* Test <stdckdint.h>. - Copyright 2022 Free Software Foundation, Inc. + Copyright 2022-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-stddef.c b/tests/test-stddef.c index 470c7a6b..5bceb18a 100644 --- a/tests/test-stddef.c +++ b/tests/test-stddef.c @@ -1,5 +1,5 @@ /* Test of <stddef.h> substitute. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,14 +19,12 @@ #include <config.h> #include <stddef.h> -#include <limits.h> -#include <stdalign.h> /* Check that appropriate types are defined. */ wchar_t a = 'c'; ptrdiff_t b = 1; size_t c = 2; -max_align_t x; +max_align_t mat; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ @@ -45,10 +43,6 @@ struct d static_assert (sizeof (offsetof (struct d, e)) == sizeof (size_t)); static_assert (offsetof (struct d, f) == 1); -/* offsetof promotes to an unsigned integer if and only if sizes do - not fit in int. */ -static_assert ((offsetof (struct d, e) < -1) == (INT_MAX < (size_t) -1)); - /* Check max_align_t's alignment. */ static_assert (alignof (double) <= alignof (max_align_t)); static_assert (alignof (int) <= alignof (max_align_t)); @@ -69,6 +63,36 @@ static_assert (__alignof__ (wchar_t) <= __alignof__ (max_align_t)); static_assert (__alignof__ (struct d) <= __alignof__ (max_align_t)); #endif +int test_unreachable_optimization (int x); +_Noreturn void test_unreachable_noreturn (void); + +int +test_unreachable_optimization (int x) +{ + /* Check that the compiler uses 'unreachable' for optimization. + This function, when compiled with optimization, should have code + equivalent to + return x + 3; + Use 'objdump --disassemble test-stddef.o' to verify this. */ + if (x < 4) + unreachable (); + return (x > 1 ? x + 3 : 2 * x + 10); +} + +_Noreturn void +test_unreachable_noreturn (void) +{ + /* Check that the compiler's data-flow analysis recognizes 'unreachable ()'. + This function should not elicit a warning. */ + unreachable (); +} + +#include <limits.h> /* INT_MAX */ + +/* offsetof promotes to an unsigned integer if and only if sizes do + not fit in int. */ +static_assert ((offsetof (struct d, e) < -1) == (INT_MAX < (size_t) -1)); + int main (void) { diff --git a/tests/test-stdint.c b/tests/test-stdint.c index 7d71f687..47bedc89 100644 --- a/tests/test-stdint.c +++ b/tests/test-stdint.c @@ -1,5 +1,5 @@ /* Test of <stdint.h> substitute. - Copyright (C) 2006-2022 Free Software Foundation, Inc. + Copyright (C) 2006-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -216,22 +216,24 @@ err or; /* 7.18.1.4. Integer types capable of holding object pointers */ /* 7.18.2.4. Limits of integer types capable of holding object pointers */ +#ifdef INTPTR_MAX intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX }; verify (sizeof (void *) <= sizeof (intptr_t)); +# ifndef __CHERI_PURE_CAPABILITY__ verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN); verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); +# endif verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0); verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); +#endif +#ifdef UINTPTR_MAX uintptr_t h[2] = { 17, UINTPTR_MAX }; verify (sizeof (void *) <= sizeof (uintptr_t)); +# ifndef __CHERI_PURE_CAPABILITY__ verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); +# endif verify_same_types (UINTPTR_MAX, (uintptr_t) 0 + 0); - -#if INTPTR_MIN && INTPTR_MAX && UINTPTR_MAX -/* ok */ -#else -err or; #endif /* 7.18.1.5. Greatest-width integer types */ @@ -408,8 +410,14 @@ verify_width (INT_FAST32_WIDTH, INT_FAST32_MIN, INT_FAST32_MAX); verify_width (UINT_FAST32_WIDTH, 0, UINT_FAST32_MAX); verify_width (INT_FAST64_WIDTH, INT_FAST64_MIN, INT_FAST64_MAX); verify_width (UINT_FAST64_WIDTH, 0, UINT_FAST64_MAX); +#ifndef __CHERI_PURE_CAPABILITY__ +# ifdef INTPTR_WIDTH verify_width (INTPTR_WIDTH, INTPTR_MIN, INTPTR_MAX); +# endif +# ifdef UINTPTR_WIDTH verify_width (UINTPTR_WIDTH, 0, UINTPTR_MAX); +# endif +#endif verify_width (INTMAX_WIDTH, INTMAX_MIN, INTMAX_MAX); verify_width (UINTMAX_WIDTH, 0, UINTMAX_MAX); verify_width (PTRDIFF_WIDTH, PTRDIFF_MIN, PTRDIFF_MAX); diff --git a/tests/test-stdio.c b/tests/test-stdio.c index 1908da35..49969520 100644 --- a/tests/test-stdio.c +++ b/tests/test-stdio.c @@ -1,5 +1,5 @@ /* Test of <stdio.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,6 +23,9 @@ /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; +/* Check that the _PRINTF_NAN_LEN_MAX macro is defined. */ +int pnlm[] = { _PRINTF_NAN_LEN_MAX }; + /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ static_assert (sizeof NULL == sizeof (void *)); @@ -34,8 +37,57 @@ size_t t3; ssize_t t4; va_list t5; +#include <string.h> + +#include "signed-nan.h" +#include "signed-snan.h" +#include "macros.h" + int main (void) { + { + double value1; + char buf[64]; + + value1 = positive_NaNd(); + sprintf (buf, "%g", value1); + ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + + value1 = negative_NaNd(); + sprintf (buf, "%g", value1); + ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + } +#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + /* Check the value of _PRINTF_NAN_LEN_MAX. */ + { + double value1; + memory_double value2; + char buf[64]; + + value1 = positive_SNaNd(); + sprintf (buf, "%g", value1); + ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + + value1 = negative_SNaNd(); + sprintf (buf, "%g", value1); + ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + + value2.value = positive_NaNd (); + #if DBL_EXPBIT0_BIT == 20 + value2.word[DBL_EXPBIT0_WORD] ^= 0x54321; + #endif + sprintf (buf, "%g", value2.value); + ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + + value2.value = negative_NaNd (); + #if DBL_EXPBIT0_BIT == 20 + value2.word[DBL_EXPBIT0_WORD] ^= 0x54321; + #endif + sprintf (buf, "%g", value2.value); + ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + } +#endif + return 0; } diff --git a/tests/test-stdlib.c b/tests/test-stdlib.c index 4fdafc99..cb6db802 100644 --- a/tests/test-stdlib.c +++ b/tests/test-stdlib.c @@ -1,5 +1,5 @@ /* Test of <stdlib.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -45,8 +45,19 @@ static_assert (sizeof NULL == sizeof (void *)); int main (void) { - if (test_sys_wait_macros ()) + /* POSIX:2018 says: + "In the POSIX locale the value of MB_CUR_MAX shall be 1." */ + /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the + "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" + locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, + that is, effectively the "C.UTF-8" locale. */ +#ifndef __ANDROID__ + if (MB_CUR_MAX != 1) return 1; +#endif + + if (test_sys_wait_macros ()) + return 2; return exitcode; } diff --git a/tests/test-strerror.c b/tests/test-strerror.c index b9ec040a..3074b5cd 100644 --- a/tests/test-strerror.c +++ b/tests/test-strerror.c @@ -1,5 +1,5 @@ /* Test of strerror() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-strerror_r.c b/tests/test-strerror_r.c index 916ce3fc..4b4e27f4 100644 --- a/tests/test-strerror_r.c +++ b/tests/test-strerror_r.c @@ -1,5 +1,5 @@ /* Test of strerror_r() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-striconveh.c b/tests/test-striconveh.c index 15627f3d..71dfc3f7 100644 --- a/tests/test-striconveh.c +++ b/tests/test-striconveh.c @@ -1,5 +1,5 @@ /* Test of character set conversion with error handling. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -68,7 +68,7 @@ main () iconv_t cd_88592_to_utf8 = iconv_open ("UTF-8", "ISO-8859-2"); iconv_t cd_utf8_to_88592 = iconv_open ("ISO-8859-2", "UTF-8"); iconv_t cd_utf7_to_utf8 = iconv_open ("UTF-8", "UTF-7"); -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__) iconv_t cd_ascii_to_gb18030 = iconv_open ("GB18030", "ASCII"); iconv_t cd_utf8_to_gb18030 = iconv_open ("GB18030", "UTF-8"); iconv_t cd_88591_to_gb18030 = iconv_open ("GB18030", "ISO-8859-1"); @@ -82,7 +82,7 @@ main () iconveh_t cdeh_88591_to_utf8; iconveh_t cdeh_utf8_to_88591; iconveh_t cdeh_utf7_to_utf8; -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__) iconveh_t cdeh_ascii_to_gb18030; iconveh_t cdeh_88591_to_gb18030; iconveh_t cdeh_utf7_to_gb18030; @@ -93,7 +93,7 @@ main () ASSERT (cd_utf8_to_88591 != (iconv_t)(-1)); ASSERT (cd_88592_to_utf8 != (iconv_t)(-1)); ASSERT (cd_utf8_to_88592 != (iconv_t)(-1)); -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__) ASSERT (cd_ascii_to_gb18030 != (iconv_t)(-1)); ASSERT (cd_utf8_to_gb18030 != (iconv_t)(-1)); # endif @@ -130,7 +130,7 @@ main () cdeh_utf7_to_utf8.cd1 = cd_utf7_to_utf8; cdeh_utf7_to_utf8.cd2 = (iconv_t)(-1); -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__) cdeh_ascii_to_gb18030.cd = cd_ascii_to_gb18030; cdeh_ascii_to_gb18030.cd1 = cd_ascii_to_utf8; cdeh_ascii_to_gb18030.cd2 = cd_utf8_to_gb18030; @@ -330,7 +330,7 @@ main () } } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__) /* Test conversion from ISO-8859-1 to GB18030 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { @@ -462,8 +462,10 @@ main () } } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) - /* Test conversion from ASCII to GB18030 with invalid input (EILSEQ). */ +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || ((__GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2) && !defined __UCLIBC__) + /* Test conversion from ASCII to GB18030 with invalid input (EILSEQ). + Note: glibc's GB18030 converter was buggy in glibc-2.15; fixed by + Andreas Schwab on 2012-02-06. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; @@ -646,7 +648,7 @@ main () free (result); } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__) /* Test conversion from UTF-7 to GB18030 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { @@ -746,8 +748,10 @@ main () } } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) - /* Test conversion from UTF-7 to GB18030 with EILSEQ. */ +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || ((__GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2) && !defined __UCLIBC__) + /* Test conversion from UTF-7 to GB18030 with EILSEQ. + Note: glibc's GB18030 converter was buggy in glibc-2.15; fixed by + Andreas Schwab on 2012-02-06. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; @@ -922,7 +926,7 @@ main () free (result); } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__) /* Test conversion from ISO-8859-1 to GB18030 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { @@ -985,8 +989,10 @@ main () } } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) - /* Test conversion from ASCII to GB18030 with invalid input (EILSEQ). */ +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || ((__GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2) && !defined __UCLIBC__) + /* Test conversion from ASCII to GB18030 with invalid input (EILSEQ). + Note: glibc's GB18030 converter was buggy in glibc-2.15; fixed by + Andreas Schwab on 2012-02-06. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; @@ -1201,7 +1207,7 @@ main () } } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__) /* Test conversion from ISO-8859-1 to GB18030 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { @@ -1421,7 +1427,7 @@ main () free (result); } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__) /* Test conversion from ISO-8859-1 to GB18030 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { diff --git a/tests/test-striconveha.c b/tests/test-striconveha.c index 6f6e8843..376f3cb6 100644 --- a/tests/test-striconveha.c +++ b/tests/test-striconveha.c @@ -1,5 +1,5 @@ /* Test of character set conversion with error handling and autodetection. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -308,7 +308,8 @@ main () } /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ + || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) if (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-8. */ @@ -405,7 +406,7 @@ main () } # endif -# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || _LIBICONV_VERSION >= 0x0105 +# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || (_LIBICONV_VERSION >= 0x0105 && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) /* Test conversion from UTF-8 to ISO-8859-1 with transliteration. */ for (h = 0; h < SIZEOF (handlers); h++) { @@ -547,7 +548,8 @@ main () } /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ + || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) if (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-8. */ @@ -584,7 +586,7 @@ main () } # endif -# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || _LIBICONV_VERSION >= 0x0105 +# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || (_LIBICONV_VERSION >= 0x0105 && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) /* Test conversion from UTF-8 to ISO-8859-1 with transliteration. */ for (h = 0; h < SIZEOF (handlers); h++) { diff --git a/tests/test-string.c b/tests/test-string.c index 94688726..053c2e4a 100644 --- a/tests/test-string.c +++ b/tests/test-string.c @@ -1,5 +1,5 @@ /* Test of <string.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-strncat.c b/tests/test-strncat.c index c25890cb..c2050513 100644 --- a/tests/test-strncat.c +++ b/tests/test-strncat.c @@ -1,5 +1,5 @@ /* Test of strncat() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-strstr.c b/tests/test-strstr.c index f59dda67..5822a2e6 100644 --- a/tests/test-strstr.c +++ b/tests/test-strstr.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc. + * Copyright (C) 2004, 2007-2024 Free Software Foundation, Inc. * Written by Bruno Haible and Eric Blake * * This program is free software: you can redistribute it and/or modify @@ -275,6 +275,14 @@ main (int argc, char *argv[]) free (haystack); } + /* Test case from Yves Bastide. + <https://www.openwall.com/lists/musl/2014/04/18/2> */ + { + const char input[] = "playing play play play always"; + const char *result = strstr (input, "play play play"); + ASSERT (result == input + 8); + } + /* Test long needles. */ { size_t m = 1024; diff --git a/tests/test-symlink.c b/tests/test-symlink.c index 3dbd60a0..04c3e7a8 100644 --- a/tests/test-symlink.c +++ b/tests/test-symlink.c @@ -1,5 +1,5 @@ /* Tests of symlink. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-symlink.h b/tests/test-symlink.h index 0ce5ad4a..a63faed7 100644 --- a/tests/test-symlink.h +++ b/tests/test-symlink.h @@ -1,5 +1,5 @@ /* Tests of symlink. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_ioctl.c b/tests/test-sys_ioctl.c index 72c9d49a..4cecce18 100644 --- a/tests/test-sys_ioctl.c +++ b/tests/test-sys_ioctl.c @@ -1,5 +1,5 @@ /* Test of <sys/ioctl.h> substitute. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_select.c b/tests/test-sys_select.c index c895fe2b..db791de1 100644 --- a/tests/test-sys_select.c +++ b/tests/test-sys_select.c @@ -1,5 +1,5 @@ /* Test of <sys/select.h> substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,6 +20,16 @@ #include <sys/select.h> +/* Check that the 'struct timeval' type is defined. */ +struct timeval a; + +/* Check that a.tv_sec is wide enough to hold a time_t, ignoring + signedness issues. */ +typedef int verify_tv_sec_type[sizeof (time_t) <= sizeof (a.tv_sec) ? 1 : -1]; + +/* Check that sigset_t is defined. */ +sigset_t t2; + #include "signature.h" /* The following may be macros without underlying functions, so only @@ -37,16 +47,6 @@ SIGNATURE_CHECK (FD_SET, int, (int, fd_set *)); SIGNATURE_CHECK (FD_ZERO, void, (fd_set *)); #endif -/* Check that the 'struct timeval' type is defined. */ -struct timeval a; - -/* Check that a.tv_sec is wide enough to hold a time_t, ignoring - signedness issues. */ -typedef int verify_tv_sec_type[sizeof (time_t) <= sizeof (a.tv_sec) ? 1 : -1]; - -/* Check that sigset_t is defined. */ -sigset_t t2; - int main (void) { diff --git a/tests/test-sys_socket.c b/tests/test-sys_socket.c index f230d5b4..4e0f9ad4 100644 --- a/tests/test-sys_socket.c +++ b/tests/test-sys_socket.c @@ -1,5 +1,5 @@ /* Test of <sys/socket.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,8 +20,6 @@ #include <sys/socket.h> -#include <errno.h> - #if HAVE_SHUTDOWN /* Check some integer constant expressions. */ int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; @@ -40,6 +38,8 @@ struct iovec io; /* Check that a minimal set of 'struct msghdr' is defined. */ struct msghdr msg; +#include <errno.h> + int main (void) { diff --git a/tests/test-sys_stat.c b/tests/test-sys_stat.c index b404d9f2..7c4ec1fe 100644 --- a/tests/test-sys_stat.c +++ b/tests/test-sys_stat.c @@ -1,5 +1,5 @@ /* Test of <sys/stat.h> substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_time.c b/tests/test-sys_time.c index b952243e..5db5c2c0 100644 --- a/tests/test-sys_time.c +++ b/tests/test-sys_time.c @@ -1,5 +1,5 @@ /* Test of <sys/time.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_types.c b/tests/test-sys_types.c index 290bd0d5..f661a921 100644 --- a/tests/test-sys_types.c +++ b/tests/test-sys_types.c @@ -1,5 +1,5 @@ /* Test of <sys/types.h> substitute. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_uio.c b/tests/test-sys_uio.c index f4f7b7ac..d371471f 100644 --- a/tests/test-sys_uio.c +++ b/tests/test-sys_uio.c @@ -1,5 +1,5 @@ /* Test of <sys/uio.h> substitute. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_wait.h b/tests/test-sys_wait.h index 9becf28e..5f2eec54 100644 --- a/tests/test-sys_wait.h +++ b/tests/test-sys_wait.h @@ -1,5 +1,5 @@ /* Test of macros shared between <sys/wait.h> and <stdlib.h>. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-thread_create.c b/tests/test-thread_create.c index 17e6942b..89dc1c9e 100644 --- a/tests/test-thread_create.c +++ b/tests/test-thread_create.c @@ -1,5 +1,5 @@ /* Test of gl_thread_create () macro. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ static int dummy; static volatile int work_done; static void * -worker_thread_func (void *arg) +worker_thread_func (_GL_UNUSED void *arg) { work_done = 1; return &dummy; diff --git a/tests/test-thread_self.c b/tests/test-thread_self.c index 30d46380..e494613b 100644 --- a/tests/test-thread_self.c +++ b/tests/test-thread_self.c @@ -1,5 +1,5 @@ /* Test of gl_thread_self () macro. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-time-h.c b/tests/test-time-h.c new file mode 100644 index 00000000..01f9fff8 --- /dev/null +++ b/tests/test-time-h.c @@ -0,0 +1,43 @@ +/* Test of <time.h> substitute. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include <time.h> + +/* Check that the types are all defined. */ +struct timespec t1; +#if 0 +/* POSIX:2008 does not require pid_t in <time.h> unconditionally, and indeed + it's missing on Mac OS X 10.5, FreeBSD 6.4, OpenBSD 4.9, mingw. */ +pid_t t2; +#endif + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +static_assert (sizeof NULL == sizeof (void *)); + +/* Check that TIME_UTC is defined and a positive integer. */ +int t3 = TIME_UTC; +static_assert (TIME_UTC > 0); + +int +main (void) +{ + return 0; +} diff --git a/tests/test-time.c b/tests/test-time.c index 6b69f3d5..752d4c0f 100644 --- a/tests/test-time.c +++ b/tests/test-time.c @@ -1,5 +1,5 @@ -/* Test of <time.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +/* Test of time() function. + Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -14,30 +14,36 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ -/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ +/* Written by Bruno Haible. */ #include <config.h> #include <time.h> -/* Check that the types are all defined. */ -struct timespec t1; -#if 0 -/* POSIX:2008 does not require pid_t in <time.h> unconditionally, and indeed - it's missing on Mac OS X 10.5, FreeBSD 6.4, OpenBSD 4.9, mingw. */ -pid_t t2; -#endif +#include "signature.h" +SIGNATURE_CHECK (time, time_t, (time_t *)); -/* Check that NULL can be passed through varargs as a pointer type, - per POSIX 2008. */ -static_assert (sizeof NULL == sizeof (void *)); +#include <sys/time.h> -/* Check that TIME_UTC is defined and a positive integer. */ -int t3 = TIME_UTC; -static_assert (TIME_UTC > 0); +#include "macros.h" int main (void) { + /* Check consistency of time() with gettimeofday().tv_sec. */ + struct timeval tv1; + struct timeval tv2; + time_t tt3; + + /* Wait until gettimeofday() reports an increase in tv_sec. */ + ASSERT (gettimeofday (&tv1, NULL) == 0); + do + ASSERT (gettimeofday (&tv2, NULL) == 0); + while (tv2.tv_sec == tv1.tv_sec); + /* We are now at the beginning of a second. Test whether time() reports + the new second or the previous one. */ + tt3 = time (NULL); + ASSERT (tt3 >= tv2.tv_sec); + return 0; } diff --git a/tests/test-uchar.c b/tests/test-uchar.c new file mode 100644 index 00000000..dfb368e0 --- /dev/null +++ b/tests/test-uchar.c @@ -0,0 +1,57 @@ +/* Test of <uchar.h> substitute. + Copyright (C) 2019-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019. */ + +#include <config.h> + +#include <uchar.h> + +/* Check that the types are defined. */ +mbstate_t a = { 0 }; +size_t b = 5; +char8_t c = 'x'; +char16_t d = 'y'; +char32_t e = 'z'; + +/* Check that char8_t, char16_t, and char32_t are unsigned types. */ +static_assert ((char8_t)(-1) >= 0); +static_assert ((char16_t)(-1) >= 0); +#if !defined __HP_cc +static_assert ((char32_t)(-1) >= 0); +#endif + +/* Check that char8_t is at least 8 bits wide. */ +static_assert ((char8_t)0xFF != (char8_t)0x7F); + +/* Check that char16_t is at least 16 bits wide. */ +static_assert ((char16_t)0xFFFF != (char16_t)0x7FFF); + +/* Check that char32_t is at least 31 bits wide. */ +static_assert ((char32_t)0x7FFFFFFF != (char32_t)0x3FFFFFFF); + +/* Check that _GL_SMALL_WCHAR_T is correctly defined. */ +#if _GL_SMALL_WCHAR_T +static_assert (sizeof (wchar_t) < sizeof (char32_t)); +#else +static_assert (sizeof (wchar_t) == sizeof (char32_t)); +#endif + +int +main (void) +{ + return 0; +} diff --git a/tests/test-unistd.c b/tests/test-unistd.c index a59af1e3..931d65e4 100644 --- a/tests/test-unistd.c +++ b/tests/test-unistd.c @@ -1,5 +1,5 @@ /* Test of <unistd.h> substitute. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-unsetenv.c b/tests/test-unsetenv.c index 61dbc81a..4e6a19ad 100644 --- a/tests/test-unsetenv.c +++ b/tests/test-unsetenv.c @@ -1,5 +1,5 @@ /* Tests of unsetenv. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,7 +32,8 @@ SIGNATURE_CHECK (unsetenv, int, (char const *)); int main (void) { - char entry[] = "b=2"; + /* Static to pacify gcc -Wanalyzer-putenv-of-auto-var. */ + static char entry[] = "b=2"; /* Test removal when multiple entries present. */ ASSERT (putenv ((char *) "a=1") == 0); diff --git a/tests/test-usleep.c b/tests/test-usleep.c index e1133dd6..ba82a162 100644 --- a/tests/test-usleep.c +++ b/tests/test-usleep.c @@ -1,5 +1,5 @@ /* Test of usleep() function. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-verify-try.c b/tests/test-verify-try.c index 2456133d..d16fb938 100644 --- a/tests/test-verify-try.c +++ b/tests/test-verify-try.c @@ -1,6 +1,6 @@ /* Test the "verify" module. - Copyright (C) 2017-2022 Free Software Foundation, Inc. + Copyright (C) 2017-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-verify.c b/tests/test-verify.c index 4ba89c03..1d8f43c7 100644 --- a/tests/test-verify.c +++ b/tests/test-verify.c @@ -1,6 +1,6 @@ /* Test the "verify" module. - Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-wchar.c b/tests/test-wchar.c index af7c9486..663a5a4e 100644 --- a/tests/test-wchar.c +++ b/tests/test-wchar.c @@ -1,5 +1,5 @@ /* Test of <wchar.h> substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-wcrtomb-w32-1.sh b/tests/test-wcrtomb-w32-1.sh deleted file mode 100755 index b01c5436..00000000 --- a/tests/test-wcrtomb-w32-1.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# Test a CP1252 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France 1252 diff --git a/tests/test-wcrtomb-w32-2.sh b/tests/test-wcrtomb-w32-2.sh index 5481634d..b01c5436 100755 --- a/tests/test-wcrtomb-w32-2.sh +++ b/tests/test-wcrtomb-w32-2.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a CP1256 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 +# Test a CP1252 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France 1252 diff --git a/tests/test-wcrtomb-w32-3.sh b/tests/test-wcrtomb-w32-3.sh index f35879da..5481634d 100755 --- a/tests/test-wcrtomb-w32-3.sh +++ b/tests/test-wcrtomb-w32-3.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a CP932 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} Japanese_Japan 932 +# Test a CP1256 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 diff --git a/tests/test-wcrtomb-w32-4.sh b/tests/test-wcrtomb-w32-4.sh index 8eec6cbc..fb04e583 100755 --- a/tests/test-wcrtomb-w32-4.sh +++ b/tests/test-wcrtomb-w32-4.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a CP950 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_Taiwan 950 +# Test some UTF-8 locales. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 diff --git a/tests/test-wcrtomb-w32-5.sh b/tests/test-wcrtomb-w32-5.sh index fd47d6fa..f35879da 100755 --- a/tests/test-wcrtomb-w32-5.sh +++ b/tests/test-wcrtomb-w32-5.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a CP936 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 936 +# Test a CP932 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} Japanese_Japan 932 diff --git a/tests/test-wcrtomb-w32-6.sh b/tests/test-wcrtomb-w32-6.sh index 802237d1..8eec6cbc 100755 --- a/tests/test-wcrtomb-w32-6.sh +++ b/tests/test-wcrtomb-w32-6.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test a GB18030 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 54936 +# Test a CP950 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_Taiwan 950 diff --git a/tests/test-wcrtomb-w32-7.sh b/tests/test-wcrtomb-w32-7.sh index fb04e583..fd47d6fa 100755 --- a/tests/test-wcrtomb-w32-7.sh +++ b/tests/test-wcrtomb-w32-7.sh @@ -1,4 +1,4 @@ #!/bin/sh -# Test some UTF-8 locales. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 +# Test a CP936 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 936 diff --git a/tests/test-wcrtomb-w32-8.sh b/tests/test-wcrtomb-w32-8.sh new file mode 100755 index 00000000..802237d1 --- /dev/null +++ b/tests/test-wcrtomb-w32-8.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a GB18030 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 54936 diff --git a/tests/test-wcrtomb-w32.c b/tests/test-wcrtomb-w32.c index 67fa5a31..4be9a0df 100644 --- a/tests/test-wcrtomb-w32.c +++ b/tests/test-wcrtomb-w32.c @@ -1,5 +1,5 @@ /* Test of conversion of wide character to multibyte character. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -184,6 +184,26 @@ test_one_locale (const char *name, int codepage) } return 0; + case 65001: + /* Locale encoding is CP65001 = UTF-8. */ + if (strcmp (locale_charset (), "UTF-8") != 0) + return 77; + { + /* Convert "B\303\274\303\237er": "Büßer" */ + memset (buf, 'x', 8); + ret = wcrtomb (buf, 0x00FC, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\303\274", 2) == 0); + ASSERT (buf[2] == 'x'); + + memset (buf, 'x', 8); + ret = wcrtomb (buf, 0x00DF, NULL); + ASSERT (ret == 2); + ASSERT (memcmp (buf, "\303\237", 2) == 0); + ASSERT (buf[2] == 'x'); + } + return 0; + case 932: /* Locale encoding is CP932, similar to Shift_JIS. */ { @@ -276,26 +296,6 @@ test_one_locale (const char *name, int codepage) } return 0; - case 65001: - /* Locale encoding is CP65001 = UTF-8. */ - if (strcmp (locale_charset (), "UTF-8") != 0) - return 77; - { - /* Convert "B\303\274\303\237er": "Büßer" */ - memset (buf, 'x', 8); - ret = wcrtomb (buf, 0x00FC, NULL); - ASSERT (ret == 2); - ASSERT (memcmp (buf, "\303\274", 2) == 0); - ASSERT (buf[2] == 'x'); - - memset (buf, 'x', 8); - ret = wcrtomb (buf, 0x00DF, NULL); - ASSERT (ret == 2); - ASSERT (memcmp (buf, "\303\237", 2) == 0); - ASSERT (buf[2] == 'x'); - } - return 0; - default: return 1; } diff --git a/tests/test-wcrtomb.c b/tests/test-wcrtomb.c index 71d0faf3..640d6d9c 100644 --- a/tests/test-wcrtomb.c +++ b/tests/test-wcrtomb.c @@ -1,5 +1,5 @@ /* Test of conversion of wide character to multibyte character. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -117,6 +117,10 @@ main (int argc, char *argv[]) switch (argv[1][0]) { case '1': + /* C locale; tested above. */ + return 0; + + case '2': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { const char input[] = "B\374\337er"; /* "Büßer" */ @@ -126,7 +130,7 @@ main (int argc, char *argv[]) } return 0; - case '2': + case '3': /* Locale encoding is UTF-8. */ { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ @@ -136,7 +140,7 @@ main (int argc, char *argv[]) } return 0; - case '3': + case '4': /* Locale encoding is EUC-JP. */ { const char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ @@ -147,7 +151,7 @@ main (int argc, char *argv[]) } return 0; - case '4': + case '5': /* Locale encoding is GB18030. */ { const char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ @@ -156,10 +160,6 @@ main (int argc, char *argv[]) check_character (input + 3, 4); } return 0; - - case '5': - /* C locale; tested above. */ - return 0; } return 1; diff --git a/tests/test-wcrtomb.sh b/tests/test-wcrtomb.sh index 01d8d53b..b4604612 100755 --- a/tests/test-wcrtomb.sh +++ b/tests/test-wcrtomb.sh @@ -1,10 +1,14 @@ #!/bin/sh +# Test in the POSIX locale. +LC_ALL=C ${CHECKER} ./test-wcrtomb${EXEEXT} 1 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-wcrtomb${EXEEXT} 1 || exit 1 + # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ - ${CHECKER} ./test-wcrtomb${EXEEXT} 1 \ + ${CHECKER} ./test-wcrtomb${EXEEXT} 2 \ || exit 1 fi @@ -12,7 +16,7 @@ fi : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ - ${CHECKER} ./test-wcrtomb${EXEEXT} 2 \ + ${CHECKER} ./test-wcrtomb${EXEEXT} 3 \ || exit 1 fi @@ -20,7 +24,7 @@ fi : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ - ${CHECKER} ./test-wcrtomb${EXEEXT} 3 \ + ${CHECKER} ./test-wcrtomb${EXEEXT} 4 \ || exit 1 fi @@ -28,12 +32,8 @@ fi : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ - ${CHECKER} ./test-wcrtomb${EXEEXT} 4 \ + ${CHECKER} ./test-wcrtomb${EXEEXT} 5 \ || exit 1 fi -# Test in the POSIX locale. -LC_ALL=C ${CHECKER} ./test-wcrtomb${EXEEXT} 5 || exit 1 -LC_ALL=POSIX ${CHECKER} ./test-wcrtomb${EXEEXT} 5 || exit 1 - exit 0 diff --git a/tests/test-wctype-h.c b/tests/test-wctype-h.c index 08da56b5..016fd8fc 100644 --- a/tests/test-wctype-h.c +++ b/tests/test-wctype-h.c @@ -1,5 +1,5 @@ /* Test of <wctype.h> substitute. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,8 +20,6 @@ #include <wctype.h> -#include "macros.h" - /* Check that the type wint_t is defined. */ wint_t a = 'x'; /* Check that WEOF is defined. */ @@ -33,6 +31,8 @@ wctype_t p; /* Check that the type wctrans_t is defined. */ wctrans_t q; +#include "macros.h" + int main (void) { @@ -62,6 +62,43 @@ main (void) ASSERT (!iswupper (e)); ASSERT (!iswxdigit (e)); + /* Sanity check for the iswprint function. */ + ASSERT (iswprint (L' ')); + ASSERT (!iswprint (L'\t')); + ASSERT (!iswprint (L'\n')); + + /* Sanity check for the iswpunct function. + These characters are usually expected to be punctuation or symbol + characters. */ + ASSERT (iswpunct (L'!')); + ASSERT (iswpunct (L'"')); + ASSERT (iswpunct (L'#')); + ASSERT (iswpunct (L'%')); + ASSERT (iswpunct (L'&')); + ASSERT (iswpunct (L'\'')); + ASSERT (iswpunct (L'(')); + ASSERT (iswpunct (L')')); + ASSERT (iswpunct (L'*')); + ASSERT (iswpunct (L',')); + ASSERT (iswpunct (L'-')); + ASSERT (iswpunct (L'.')); + ASSERT (iswpunct (L'/')); + ASSERT (iswpunct (L':')); + ASSERT (iswpunct (L';')); + ASSERT (iswpunct (L'?')); + ASSERT (iswpunct (L'@')); + ASSERT (iswpunct (L'[')); + ASSERT (iswpunct (L'\\')); + ASSERT (iswpunct (L']')); + ASSERT (iswpunct (L'_')); + ASSERT (iswpunct (L'{')); + ASSERT (iswpunct (L'}')); + ASSERT (!iswpunct (L'5')); + ASSERT (!iswpunct (L'F')); + ASSERT (!iswpunct (L' ')); + ASSERT (!iswpunct (L'\t')); + ASSERT (!iswpunct (L'\n')); + /* Check that the tow* functions exist as functions or as macros. */ (void) towlower (0); (void) towupper (0); diff --git a/tests/test-wcwidth.c b/tests/test-wcwidth.c index 7e522eec..79556a24 100644 --- a/tests/test-wcwidth.c +++ b/tests/test-wcwidth.c @@ -1,5 +1,5 @@ /* Test of wcwidth() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/test-xalloc-die.c b/tests/test-xalloc-die.c index 78781306..d4565434 100644 --- a/tests/test-xalloc-die.c +++ b/tests/test-xalloc-die.c @@ -1,5 +1,5 @@ /* Test of xalloc_die() function. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@ #include "xalloc.h" int -main (_GL_UNUSED int argc, char **argv) +main () { xalloc_die (); return 0; diff --git a/tests/test-xalloc-die.sh b/tests/test-xalloc-die.sh index 2a891110..dedc132c 100755 --- a/tests/test-xalloc-die.sh +++ b/tests/test-xalloc-die.sh @@ -1,6 +1,6 @@ #!/bin/sh # Test suite for xalloc_die. -# Copyright (C) 2009-2022 Free Software Foundation, Inc. +# Copyright (C) 2009-2024 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This program is free software: you can redistribute it and/or modify diff --git a/tests/time.c b/tests/time.c new file mode 100644 index 00000000..573199c2 --- /dev/null +++ b/tests/time.c @@ -0,0 +1,41 @@ +/* Provide time() for systems for which it's broken. + Copyright (C) 2023-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible. */ + +#include <config.h> + +/* Specification. */ +#include <time.h> + +#include <stdlib.h> +#include <sys/time.h> + +time_t +time (time_t *tp) +{ + struct timeval tv; + time_t tt; + + if (gettimeofday (&tv, NULL) < 0) + abort (); + tt = tv.tv_sec; + + if (tp) + *tp = tt; + + return tt; +} diff --git a/tests/time.in.h b/tests/time.in.h index 6aa67498..df99c8ab 100644 --- a/tests/time.in.h +++ b/tests/time.in.h @@ -1,6 +1,6 @@ /* A more-standard <time.h>. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -20,6 +20,13 @@ #endif @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. + For the 'year2038' module to work right, <config.h> needs to have been + included before. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* Don't get in the way of glibc when it includes time.h merely to declare a few standard symbols, rather than to declare all the symbols. (However, skip this for MinGW as it treats __need_time_t @@ -45,6 +52,12 @@ # @INCLUDE_NEXT@ @NEXT_TIME_H@ +/* This file uses _GL_ATTRIBUTE_DEPRECATED, GNULIB_POSIXCHECK, + HAVE_RAW_DECL_*. */ +# if !_GL_CONFIG_H_INCLUDED +# error "Please include config.h first." +# endif + /* NetBSD 5.0 mis-defines NULL. */ # include <stddef.h> @@ -112,23 +125,79 @@ struct __time_t_must_be_integral { /* Set *TS to the current time, and return BASE. Upon failure, return 0. */ # if @GNULIB_TIMESPEC_GET@ -# if ! @HAVE_TIMESPEC_GET@ +# if @REPLACE_TIMESPEC_GET@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef timespec_get +# define timespec_get rpl_timespec_get +# endif +_GL_FUNCDECL_RPL (timespec_get, int, (struct timespec *ts, int base) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timespec_get, int, (struct timespec *ts, int base)); +# else +# if !@HAVE_TIMESPEC_GET@ _GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); -# endif +# endif _GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); +# endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (timespec_get); +# endif +# elif defined GNULIB_POSIXCHECK +# undef timespec_get +# if HAVE_RAW_DECL_TIMESPEC_GET +_GL_WARN_ON_USE (timespec_get, "timespec_get is unportable - " + "use gnulib module timespec_get for portability"); +# endif # endif /* Set *TS to the current time resolution, and return BASE. Upon failure, return 0. */ # if @GNULIB_TIMESPEC_GETRES@ -# if ! @HAVE_TIMESPEC_GETRES@ +# if @REPLACE_TIMESPEC_GETRES@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef timespec_getres +# define timespec_getres rpl_timespec_getres +# endif +_GL_FUNCDECL_RPL (timespec_getres, int, (struct timespec *ts, int base) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timespec_getres, int, (struct timespec *ts, int base)); +# else +# if !@HAVE_TIMESPEC_GETRES@ _GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); -# endif +# endif _GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); +# endif _GL_CXXALIASWARN (timespec_getres); +# elif defined GNULIB_POSIXCHECK +# undef timespec_getres +# if HAVE_RAW_DECL_TIMESPEC_GETRES +_GL_WARN_ON_USE (timespec_getres, "timespec_getres is unportable - " + "use gnulib module timespec_getres for portability"); +# endif +# endif + +/* Return the number of seconds that have elapsed since the Epoch. */ +# if @GNULIB_TIME@ +# if @REPLACE_TIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define time rpl_time +# endif +_GL_FUNCDECL_RPL (time, time_t, (time_t *__tp)); +_GL_CXXALIAS_RPL (time, time_t, (time_t *__tp)); +# else +_GL_CXXALIAS_SYS (time, time_t, (time_t *__tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (time); +# endif +# elif defined GNULIB_POSIXCHECK +# undef time +# if HAVE_RAW_DECL_TIME +_GL_WARN_ON_USE (time, "time has consistency problems - " + "use gnulib module time for portability"); +# endif # endif /* Sleep for at least RQTP seconds unless interrupted, If interrupted, @@ -154,6 +223,12 @@ _GL_CXXALIAS_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # endif _GL_CXXALIASWARN (nanosleep); +# elif defined GNULIB_POSIXCHECK +# undef nanosleep +# if HAVE_RAW_DECL_NANOSLEEP +_GL_WARN_ON_USE (nanosleep, "nanosleep is unportable - " + "use gnulib module nanosleep for portability"); +# endif # endif /* Initialize time conversion information. */ @@ -189,6 +264,12 @@ _GL_CXXALIAS_MDA (tzset, void, (void)); _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); +# elif defined GNULIB_POSIXCHECK +# undef tzset +# if HAVE_RAW_DECL_TZSET +_GL_WARN_ON_USE (tzset, "tzset has portability problems - " + "use gnulib module tzset for portability"); +# endif # endif /* Return the 'time_t' representation of TP and normalize TP. */ @@ -205,6 +286,12 @@ _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mktime); # endif +# elif defined GNULIB_POSIXCHECK +# undef mktime +# if HAVE_RAW_DECL_MKTIME +_GL_WARN_ON_USE (mktime, "mktime has portability problems - " + "use gnulib module mktime for portability"); +# endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See @@ -255,6 +342,17 @@ _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (gmtime_r); # endif +# elif defined GNULIB_POSIXCHECK +# undef localtime_r +# if HAVE_RAW_DECL_LOCALTIME_R +_GL_WARN_ON_USE (localtime_r, "localtime_r is unportable - " + "use gnulib module time_r for portability"); +# endif +# undef gmtime_r +# if HAVE_RAW_DECL_GMTIME_R +_GL_WARN_ON_USE (gmtime_r, "gmtime_r is unportable - " + "use gnulib module time_r for portability"); +# endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See @@ -275,6 +373,12 @@ _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (localtime); # endif +# elif defined GNULIB_POSIXCHECK +# undef localtime +# if HAVE_RAW_DECL_LOCALTIME +_GL_WARN_ON_USE (localtime, "localtime has portability problems - " + "use gnulib module localtime for portability"); +# endif # endif # if 0 || @REPLACE_GMTIME@ @@ -306,6 +410,12 @@ _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm)); _GL_CXXALIASWARN (strptime); +# elif defined GNULIB_POSIXCHECK +# undef strptime +# if HAVE_RAW_DECL_STRPTIME +_GL_WARN_ON_USE (strptime, "strptime is unportable - " + "use gnulib module strptime for portability"); +# endif # endif /* Convert *TP to a date and time string. See @@ -315,6 +425,9 @@ _GL_CXXALIASWARN (strptime); # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ctime rpl_ctime # endif +# ifndef __cplusplus +_GL_ATTRIBUTE_DEPRECATED +# endif _GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); @@ -324,6 +437,8 @@ _GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ctime); # endif +# elif defined GNULIB_POSIXCHECK +/* No need to warn about portability, as a more serious warning is below. */ # endif /* Convert *TP to a date and time string. See @@ -348,6 +463,12 @@ _GL_CXXALIAS_SYS (strftime, size_t, # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strftime); # endif +# elif defined GNULIB_POSIXCHECK +# undef strftime +# if HAVE_RAW_DECL_STRFTIME +_GL_WARN_ON_USE (strftime, "strftime has portability problems - " + "use gnulib module strftime-fixes for portability"); +# endif # endif # if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ @@ -422,7 +543,15 @@ _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (timegm); +# endif +# elif defined GNULIB_POSIXCHECK +# undef timegm +# if HAVE_RAW_DECL_TIMEGM +_GL_WARN_ON_USE (timegm, "timegm is unportable - " + "use gnulib module timegm for portability"); +# endif # endif /* Encourage applications to avoid unsafe functions that can overrun @@ -430,8 +559,10 @@ _GL_CXXALIASWARN (timegm); applications should use strftime (or even sprintf) instead. */ # if defined GNULIB_POSIXCHECK # undef asctime +# if HAVE_RAW_DECL_ASCTIME _GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); +# endif # endif # if defined GNULIB_POSIXCHECK # undef asctime_r @@ -442,8 +573,10 @@ _GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - " # endif # if defined GNULIB_POSIXCHECK # undef ctime +# if HAVE_RAW_DECL_CTIME _GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); +# endif # endif # if defined GNULIB_POSIXCHECK # undef ctime_r diff --git a/tests/unicase/test-casecmp.h b/tests/unicase/test-casecmp.h index a2f90aca..a13599ea 100644 --- a/tests/unicase/test-casecmp.h +++ b/tests/unicase/test-casecmp.h @@ -1,5 +1,5 @@ /* Test of case and normalization insensitive comparison of Unicode strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-cased.c b/tests/unicase/test-cased.c index 477cd1c5..712ed14f 100644 --- a/tests/unicase/test-cased.c +++ b/tests/unicase/test-cased.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unicase/test-ignorable.c b/tests/unicase/test-ignorable.c index d4dc8498..b330dd70 100644 --- a/tests/unicase/test-ignorable.c +++ b/tests/unicase/test-ignorable.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unicase/test-is-cased.h b/tests/unicase/test-is-cased.h index db5c07ec..022be134 100644 --- a/tests/unicase/test-is-cased.h +++ b/tests/unicase/test-is-cased.h @@ -1,5 +1,5 @@ /* Test of test whether case matters for a Unicode string. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-is-casefolded.h b/tests/unicase/test-is-casefolded.h index 37019777..eb45404d 100644 --- a/tests/unicase/test-is-casefolded.h +++ b/tests/unicase/test-is-casefolded.h @@ -1,5 +1,5 @@ /* Test of test whether a Unicode string is already case-folded. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-is-lowercase.h b/tests/unicase/test-is-lowercase.h index df91eb1e..16853bdc 100644 --- a/tests/unicase/test-is-lowercase.h +++ b/tests/unicase/test-is-lowercase.h @@ -1,5 +1,5 @@ /* Test of test whether a Unicode string is entirely lower case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-is-titlecase.h b/tests/unicase/test-is-titlecase.h index c96a59d6..abbc3a5f 100644 --- a/tests/unicase/test-is-titlecase.h +++ b/tests/unicase/test-is-titlecase.h @@ -1,5 +1,5 @@ /* Test of test whether a Unicode string is entirely title case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-is-uppercase.h b/tests/unicase/test-is-uppercase.h index c58c545c..1dacd079 100644 --- a/tests/unicase/test-is-uppercase.h +++ b/tests/unicase/test-is-uppercase.h @@ -1,5 +1,5 @@ /* Test of test whether a Unicode string is entirely upper case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-locale-language.c b/tests/unicase/test-locale-language.c index dfc1b39b..ed6adeb8 100644 --- a/tests/unicase/test-locale-language.c +++ b/tests/unicase/test-locale-language.c @@ -1,5 +1,5 @@ /* Test of language code determination. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-mapping-part1.h b/tests/unicase/test-mapping-part1.h index 7bd02d13..562195a5 100644 --- a/tests/unicase/test-mapping-part1.h +++ b/tests/unicase/test-mapping-part1.h @@ -1,5 +1,5 @@ /* Test of single character case mapping functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-mapping-part2.h b/tests/unicase/test-mapping-part2.h index aafe1a56..ed489482 100644 --- a/tests/unicase/test-mapping-part2.h +++ b/tests/unicase/test-mapping-part2.h @@ -1,5 +1,5 @@ /* Test of single character case mapping functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-predicate-part1.h b/tests/unicase/test-predicate-part1.h index c0b9131b..a63f06cb 100644 --- a/tests/unicase/test-predicate-part1.h +++ b/tests/unicase/test-predicate-part1.h @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-predicate-part2.h b/tests/unicase/test-predicate-part2.h index a3e2c0ff..0b58545b 100644 --- a/tests/unicase/test-predicate-part2.h +++ b/tests/unicase/test-predicate-part2.h @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-casecmp.c b/tests/unicase/test-u16-casecmp.c index 6bb4cbf6..a85abbbd 100644 --- a/tests/unicase/test-u16-casecmp.c +++ b/tests/unicase/test-u16-casecmp.c @@ -1,5 +1,5 @@ /* Test of case and normalization insensitive comparison of UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-casecoll.c b/tests/unicase/test-u16-casecoll.c index 2eebdff6..ade96bfb 100644 --- a/tests/unicase/test-u16-casecoll.c +++ b/tests/unicase/test-u16-casecoll.c @@ -1,6 +1,6 @@ /* Test of locale dependent, case and normalization insensitive comparison of UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-casefold.c b/tests/unicase/test-u16-casefold.c index cb61f992..23e94eff 100644 --- a/tests/unicase/test-u16-casefold.c +++ b/tests/unicase/test-u16-casefold.c @@ -1,5 +1,5 @@ /* Test of casefolding mapping for UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-cased.c b/tests/unicase/test-u16-is-cased.c index 9ce5ff3a..dafba78e 100644 --- a/tests/unicase/test-u16-is-cased.c +++ b/tests/unicase/test-u16-is-cased.c @@ -1,5 +1,5 @@ /* Test of test whether case matters for an UTF-16 string. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-casefolded.c b/tests/unicase/test-u16-is-casefolded.c index 33a0724d..6072535a 100644 --- a/tests/unicase/test-u16-is-casefolded.c +++ b/tests/unicase/test-u16-is-casefolded.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-16 string is already case-folded. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-lowercase.c b/tests/unicase/test-u16-is-lowercase.c index e9726e95..5b4e095e 100644 --- a/tests/unicase/test-u16-is-lowercase.c +++ b/tests/unicase/test-u16-is-lowercase.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-16 string is entirely lower case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-titlecase.c b/tests/unicase/test-u16-is-titlecase.c index 27a4feef..4e60c4ac 100644 --- a/tests/unicase/test-u16-is-titlecase.c +++ b/tests/unicase/test-u16-is-titlecase.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-16 string is entirely title case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-uppercase.c b/tests/unicase/test-u16-is-uppercase.c index 2c5be2d8..354c9052 100644 --- a/tests/unicase/test-u16-is-uppercase.c +++ b/tests/unicase/test-u16-is-uppercase.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-16 string is entirely upper case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-tolower.c b/tests/unicase/test-u16-tolower.c index 7c20502d..86ed522f 100644 --- a/tests/unicase/test-u16-tolower.c +++ b/tests/unicase/test-u16-tolower.c @@ -1,5 +1,5 @@ /* Test of lowercase mapping for UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-totitle.c b/tests/unicase/test-u16-totitle.c index 98b489df..be653df1 100644 --- a/tests/unicase/test-u16-totitle.c +++ b/tests/unicase/test-u16-totitle.c @@ -1,5 +1,5 @@ /* Test of titlecase mapping for UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-toupper.c b/tests/unicase/test-u16-toupper.c index e4e6ae3c..5bbc10ac 100644 --- a/tests/unicase/test-u16-toupper.c +++ b/tests/unicase/test-u16-toupper.c @@ -1,5 +1,5 @@ /* Test of uppercase mapping for UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-casecmp.c b/tests/unicase/test-u32-casecmp.c index 0080ac01..aca59a88 100644 --- a/tests/unicase/test-u32-casecmp.c +++ b/tests/unicase/test-u32-casecmp.c @@ -1,5 +1,5 @@ /* Test of case and normalization insensitive comparison of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-casecoll.c b/tests/unicase/test-u32-casecoll.c index 62746c8a..7ad01630 100644 --- a/tests/unicase/test-u32-casecoll.c +++ b/tests/unicase/test-u32-casecoll.c @@ -1,6 +1,6 @@ /* Test of locale dependent, case and normalization insensitive comparison of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-casefold.c b/tests/unicase/test-u32-casefold.c index 26f8960d..c31245e1 100644 --- a/tests/unicase/test-u32-casefold.c +++ b/tests/unicase/test-u32-casefold.c @@ -1,5 +1,5 @@ /* Test of casefolding mapping for UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-cased.c b/tests/unicase/test-u32-is-cased.c index a92c2671..5f663dd8 100644 --- a/tests/unicase/test-u32-is-cased.c +++ b/tests/unicase/test-u32-is-cased.c @@ -1,5 +1,5 @@ /* Test of test whether case matters for an UTF-32 string. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-casefolded.c b/tests/unicase/test-u32-is-casefolded.c index 701f4533..1798f310 100644 --- a/tests/unicase/test-u32-is-casefolded.c +++ b/tests/unicase/test-u32-is-casefolded.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-32 string is already case-folded. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-lowercase.c b/tests/unicase/test-u32-is-lowercase.c index 2f7c4c20..3c1bf91e 100644 --- a/tests/unicase/test-u32-is-lowercase.c +++ b/tests/unicase/test-u32-is-lowercase.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-32 string is entirely lower case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-titlecase.c b/tests/unicase/test-u32-is-titlecase.c index a860867c..3aedb6c8 100644 --- a/tests/unicase/test-u32-is-titlecase.c +++ b/tests/unicase/test-u32-is-titlecase.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-32 string is entirely title case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-uppercase.c b/tests/unicase/test-u32-is-uppercase.c index 0cd34b8d..cf500991 100644 --- a/tests/unicase/test-u32-is-uppercase.c +++ b/tests/unicase/test-u32-is-uppercase.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-32 string is entirely upper case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-tolower.c b/tests/unicase/test-u32-tolower.c index 5044bc08..47c9e1ee 100644 --- a/tests/unicase/test-u32-tolower.c +++ b/tests/unicase/test-u32-tolower.c @@ -1,5 +1,5 @@ /* Test of lowercase mapping for UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-totitle.c b/tests/unicase/test-u32-totitle.c index 08d2e61a..948f48db 100644 --- a/tests/unicase/test-u32-totitle.c +++ b/tests/unicase/test-u32-totitle.c @@ -1,5 +1,5 @@ /* Test of titlecase mapping for UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-toupper.c b/tests/unicase/test-u32-toupper.c index ddc7ca2c..098c56ce 100644 --- a/tests/unicase/test-u32-toupper.c +++ b/tests/unicase/test-u32-toupper.c @@ -1,5 +1,5 @@ /* Test of uppercase mapping for UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-casecmp.c b/tests/unicase/test-u8-casecmp.c index d76b8758..904c9284 100644 --- a/tests/unicase/test-u8-casecmp.c +++ b/tests/unicase/test-u8-casecmp.c @@ -1,5 +1,5 @@ /* Test of case and normalization insensitive comparison of UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-casecoll.c b/tests/unicase/test-u8-casecoll.c index e8a19690..a3e6d95f 100644 --- a/tests/unicase/test-u8-casecoll.c +++ b/tests/unicase/test-u8-casecoll.c @@ -1,6 +1,6 @@ /* Test of locale dependent, case and normalization insensitive comparison of UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-casefold.c b/tests/unicase/test-u8-casefold.c index 5fd42844..d1fc8967 100644 --- a/tests/unicase/test-u8-casefold.c +++ b/tests/unicase/test-u8-casefold.c @@ -1,5 +1,5 @@ /* Test of casefolding mapping for UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-cased.c b/tests/unicase/test-u8-is-cased.c index dc523836..b8f0b2bf 100644 --- a/tests/unicase/test-u8-is-cased.c +++ b/tests/unicase/test-u8-is-cased.c @@ -1,5 +1,5 @@ /* Test of test whether case matters for an UTF-8 string. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-casefolded.c b/tests/unicase/test-u8-is-casefolded.c index 6adf2888..a7cc49be 100644 --- a/tests/unicase/test-u8-is-casefolded.c +++ b/tests/unicase/test-u8-is-casefolded.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-8 string is already case-folded. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-lowercase.c b/tests/unicase/test-u8-is-lowercase.c index 82a4c8d8..c78b9df0 100644 --- a/tests/unicase/test-u8-is-lowercase.c +++ b/tests/unicase/test-u8-is-lowercase.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-8 string is entirely lower case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-titlecase.c b/tests/unicase/test-u8-is-titlecase.c index e91b878a..5416ab59 100644 --- a/tests/unicase/test-u8-is-titlecase.c +++ b/tests/unicase/test-u8-is-titlecase.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-8 string is entirely title case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-uppercase.c b/tests/unicase/test-u8-is-uppercase.c index 33294fa9..279f30cc 100644 --- a/tests/unicase/test-u8-is-uppercase.c +++ b/tests/unicase/test-u8-is-uppercase.c @@ -1,5 +1,5 @@ /* Test of test whether an UTF-8 string is entirely upper case. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-tolower.c b/tests/unicase/test-u8-tolower.c index 73d9fca8..1e33148e 100644 --- a/tests/unicase/test-u8-tolower.c +++ b/tests/unicase/test-u8-tolower.c @@ -1,5 +1,5 @@ /* Test of lowercase mapping for UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-totitle.c b/tests/unicase/test-u8-totitle.c index 3a6cc10e..676456e0 100644 --- a/tests/unicase/test-u8-totitle.c +++ b/tests/unicase/test-u8-totitle.c @@ -1,5 +1,5 @@ /* Test of titlecase mapping for UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-toupper.c b/tests/unicase/test-u8-toupper.c index ce0d3529..a954dedd 100644 --- a/tests/unicase/test-u8-toupper.c +++ b/tests/unicase/test-u8-toupper.c @@ -1,5 +1,5 @@ /* Test of uppercase mapping for UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-uc_tolower.c b/tests/unicase/test-uc_tolower.c index 83942037..885476d0 100644 --- a/tests/unicase/test-uc_tolower.c +++ b/tests/unicase/test-uc_tolower.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character mapping functions. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0. */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ #include "test-mapping-part1.h" diff --git a/tests/unicase/test-uc_totitle.c b/tests/unicase/test-uc_totitle.c index 03145bce..b9422ba0 100644 --- a/tests/unicase/test-uc_totitle.c +++ b/tests/unicase/test-uc_totitle.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character mapping functions. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0. */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ #include "test-mapping-part1.h" diff --git a/tests/unicase/test-uc_toupper.c b/tests/unicase/test-uc_toupper.c index c5594053..2aff0758 100644 --- a/tests/unicase/test-uc_toupper.c +++ b/tests/unicase/test-uc_toupper.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character mapping functions. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0. */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ #include "test-mapping-part1.h" diff --git a/tests/unicase/test-ulc-casecmp.c b/tests/unicase/test-ulc-casecmp.c index 81534f04..4aaf9830 100644 --- a/tests/unicase/test-ulc-casecmp.c +++ b/tests/unicase/test-ulc-casecmp.c @@ -1,5 +1,5 @@ /* Test of case and normalization insensitive comparison of strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-ulc-casecoll.c b/tests/unicase/test-ulc-casecoll.c index 07bc2dc4..fa720e04 100644 --- a/tests/unicase/test-ulc-casecoll.c +++ b/tests/unicase/test-ulc-casecoll.c @@ -1,6 +1,6 @@ /* Test of locale dependent, case and normalization insensitive comparison of strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u16-conv-from-enc.c b/tests/uniconv/test-u16-conv-from-enc.c index 82f0091c..48c7fd77 100644 --- a/tests/uniconv/test-u16-conv-from-enc.c +++ b/tests/uniconv/test-u16-conv-from-enc.c @@ -1,5 +1,5 @@ /* Test of conversion to UTF-16 from legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -117,7 +117,8 @@ main () } /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ + || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) if (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-16. */ diff --git a/tests/uniconv/test-u16-conv-to-enc.c b/tests/uniconv/test-u16-conv-to-enc.c index b423e10c..eeb51c3d 100644 --- a/tests/uniconv/test-u16-conv-to-enc.c +++ b/tests/uniconv/test-u16-conv-to-enc.c @@ -1,5 +1,5 @@ /* Test of conversion from UTF-16 to legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u16-strconv-from-enc.c b/tests/uniconv/test-u16-strconv-from-enc.c index e34399ad..b1cb1a88 100644 --- a/tests/uniconv/test-u16-strconv-from-enc.c +++ b/tests/uniconv/test-u16-strconv-from-enc.c @@ -1,5 +1,5 @@ /* Test of conversion to UTF-16 from legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -71,7 +71,8 @@ main () } /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ + || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) if (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-16. */ diff --git a/tests/uniconv/test-u16-strconv-to-enc.c b/tests/uniconv/test-u16-strconv-to-enc.c index bfdc6623..7d3f596e 100644 --- a/tests/uniconv/test-u16-strconv-to-enc.c +++ b/tests/uniconv/test-u16-strconv-to-enc.c @@ -1,5 +1,5 @@ /* Test of conversion from UTF-16 to legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u32-conv-from-enc.c b/tests/uniconv/test-u32-conv-from-enc.c index 723a56b3..994bfb49 100644 --- a/tests/uniconv/test-u32-conv-from-enc.c +++ b/tests/uniconv/test-u32-conv-from-enc.c @@ -1,5 +1,5 @@ /* Test of conversion to UTF-32 from legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -117,7 +117,8 @@ main () } /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ + || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) if (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-16. */ diff --git a/tests/uniconv/test-u32-conv-to-enc.c b/tests/uniconv/test-u32-conv-to-enc.c index ca51aa08..5ce1d610 100644 --- a/tests/uniconv/test-u32-conv-to-enc.c +++ b/tests/uniconv/test-u32-conv-to-enc.c @@ -1,5 +1,5 @@ /* Test of conversion from UTF-32 to legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u32-strconv-from-enc.c b/tests/uniconv/test-u32-strconv-from-enc.c index bdd88347..320bc185 100644 --- a/tests/uniconv/test-u32-strconv-from-enc.c +++ b/tests/uniconv/test-u32-strconv-from-enc.c @@ -1,5 +1,5 @@ /* Test of conversion to UTF-32 from legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -71,7 +71,8 @@ main () } /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ + || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) if (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-16. */ diff --git a/tests/uniconv/test-u32-strconv-to-enc.c b/tests/uniconv/test-u32-strconv-to-enc.c index bca05f86..8ce00786 100644 --- a/tests/uniconv/test-u32-strconv-to-enc.c +++ b/tests/uniconv/test-u32-strconv-to-enc.c @@ -1,5 +1,5 @@ /* Test of conversion from UTF-32 to legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u8-conv-from-enc.c b/tests/uniconv/test-u8-conv-from-enc.c index 80a136f6..641200f2 100644 --- a/tests/uniconv/test-u8-conv-from-enc.c +++ b/tests/uniconv/test-u8-conv-from-enc.c @@ -1,5 +1,5 @@ /* Test of conversion to UTF-8 from legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -112,7 +112,8 @@ main () } /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ + || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) if (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-8. */ diff --git a/tests/uniconv/test-u8-conv-to-enc.c b/tests/uniconv/test-u8-conv-to-enc.c index 97dc82a6..cd898033 100644 --- a/tests/uniconv/test-u8-conv-to-enc.c +++ b/tests/uniconv/test-u8-conv-to-enc.c @@ -1,5 +1,5 @@ /* Test of conversion from UTF-8 to legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u8-strconv-from-enc.c b/tests/uniconv/test-u8-strconv-from-enc.c index 1ea836ac..61e3230b 100644 --- a/tests/uniconv/test-u8-strconv-from-enc.c +++ b/tests/uniconv/test-u8-strconv-from-enc.c @@ -1,5 +1,5 @@ /* Test of conversion to UTF-8 from legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -62,7 +62,8 @@ main () } /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ + || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) if (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-8. */ diff --git a/tests/uniconv/test-u8-strconv-to-enc.c b/tests/uniconv/test-u8-strconv-to-enc.c index e02f2056..68639f9e 100644 --- a/tests/uniconv/test-u8-strconv-to-enc.c +++ b/tests/uniconv/test-u8-strconv-to-enc.c @@ -1,5 +1,5 @@ /* Test of conversion from UTF-8 to legacy encodings. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_byname.c b/tests/unictype/test-bidi_byname.c index 78ca589c..96d9f173 100644 --- a/tests/unictype/test-bidi_byname.c +++ b/tests/unictype/test-bidi_byname.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2011 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_longname.c b/tests/unictype/test-bidi_longname.c index a36b81a2..fcd7255f 100644 --- a/tests/unictype/test-bidi_longname.c +++ b/tests/unictype/test-bidi_longname.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_name.c b/tests/unictype/test-bidi_name.c index c2dd49eb..4c4024d2 100644 --- a/tests/unictype/test-bidi_name.c +++ b/tests/unictype/test-bidi_name.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_of.c b/tests/unictype/test-bidi_of.c index 786f6e9c..bc158324 100644 --- a/tests/unictype/test-bidi_of.c +++ b/tests/unictype/test-bidi_of.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_test.c b/tests/unictype/test-bidi_test.c index 34349a88..fd3f2930 100644 --- a/tests/unictype/test-bidi_test.c +++ b/tests/unictype/test-bidi_test.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-block_list.c b/tests/unictype/test-block_list.c index 623f62e8..267d5456 100644 --- a/tests/unictype/test-block_list.c +++ b/tests/unictype/test-block_list.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-block_of.c b/tests/unictype/test-block_of.c index aea21e65..60345188 100644 --- a/tests/unictype/test-block_of.c +++ b/tests/unictype/test-block_of.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-block_test.c b/tests/unictype/test-block_test.c index 974bba89..be7e4417 100644 --- a/tests/unictype/test-block_test.c +++ b/tests/unictype/test-block_test.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_C.c b/tests/unictype/test-categ_C.c index 09277e39..e6a0903b 100644 --- a/tests/unictype/test-categ_C.c +++ b/tests/unictype/test-categ_C.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -294,13 +294,12 @@ { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, - { 0x2FFC, 0x2FFF }, { 0x3040, 0x3040 }, { 0x3097, 0x3098 }, { 0x3100, 0x3104 }, { 0x3130, 0x3130 }, { 0x318F, 0x318F }, - { 0x31E4, 0x31EF }, + { 0x31E4, 0x31EE }, { 0x321F, 0x321F }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, @@ -724,7 +723,8 @@ { 0x2B73A, 0x2B73F }, { 0x2B81E, 0x2B81F }, { 0x2CEA2, 0x2CEAF }, - { 0x2EBE1, 0x2F7FF }, + { 0x2EBE1, 0x2EBEF }, + { 0x2EE5E, 0x2F7FF }, { 0x2FA1E, 0x2FFFF }, { 0x3134B, 0x3134F }, { 0x323B0, 0xE00FF }, diff --git a/tests/unictype/test-categ_Cc.c b/tests/unictype/test-categ_Cc.c index cfdbb48d..3051fa97 100644 --- a/tests/unictype/test-categ_Cc.c +++ b/tests/unictype/test-categ_Cc.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Cf.c b/tests/unictype/test-categ_Cf.c index e026f091..c1ab10f2 100644 --- a/tests/unictype/test-categ_Cf.c +++ b/tests/unictype/test-categ_Cf.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Cn.c b/tests/unictype/test-categ_Cn.c index b173d392..c12c0816 100644 --- a/tests/unictype/test-categ_Cn.c +++ b/tests/unictype/test-categ_Cn.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -286,13 +286,12 @@ { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, - { 0x2FFC, 0x2FFF }, { 0x3040, 0x3040 }, { 0x3097, 0x3098 }, { 0x3100, 0x3104 }, { 0x3130, 0x3130 }, { 0x318F, 0x318F }, - { 0x31E4, 0x31EF }, + { 0x31E4, 0x31EE }, { 0x321F, 0x321F }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, @@ -715,7 +714,8 @@ { 0x2B73A, 0x2B73F }, { 0x2B81E, 0x2B81F }, { 0x2CEA2, 0x2CEAF }, - { 0x2EBE1, 0x2F7FF }, + { 0x2EBE1, 0x2EBEF }, + { 0x2EE5E, 0x2F7FF }, { 0x2FA1E, 0x2FFFF }, { 0x3134B, 0x3134F }, { 0x323B0, 0xE0000 }, diff --git a/tests/unictype/test-categ_Co.c b/tests/unictype/test-categ_Co.c index 0878bab5..ab327d77 100644 --- a/tests/unictype/test-categ_Co.c +++ b/tests/unictype/test-categ_Co.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Cs.c b/tests/unictype/test-categ_Cs.c index 16d90395..76f7dc12 100644 --- a/tests/unictype/test-categ_Cs.c +++ b/tests/unictype/test-categ_Cs.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_L.c b/tests/unictype/test-categ_L.c index a72b6f99..2e9b7be4 100644 --- a/tests/unictype/test-categ_L.c +++ b/tests/unictype/test-categ_L.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -673,6 +673,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-categ_LC.c b/tests/unictype/test-categ_LC.c index 166df6c8..16e61763 100644 --- a/tests/unictype/test-categ_LC.c +++ b/tests/unictype/test-categ_LC.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Ll.c b/tests/unictype/test-categ_Ll.c index 7feba488..c3d12127 100644 --- a/tests/unictype/test-categ_Ll.c +++ b/tests/unictype/test-categ_Ll.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Lm.c b/tests/unictype/test-categ_Lm.c index c7a5b595..06464574 100644 --- a/tests/unictype/test-categ_Lm.c +++ b/tests/unictype/test-categ_Lm.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Lo.c b/tests/unictype/test-categ_Lo.c index 37009f81..e778c7c6 100644 --- a/tests/unictype/test-categ_Lo.c +++ b/tests/unictype/test-categ_Lo.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -524,6 +524,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-categ_Lt.c b/tests/unictype/test-categ_Lt.c index 96c0cce7..32808303 100644 --- a/tests/unictype/test-categ_Lt.c +++ b/tests/unictype/test-categ_Lt.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Lu.c b/tests/unictype/test-categ_Lu.c index 14c15058..89bb6575 100644 --- a/tests/unictype/test-categ_Lu.c +++ b/tests/unictype/test-categ_Lu.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_M.c b/tests/unictype/test-categ_M.c index e872f50c..4b2c4f85 100644 --- a/tests/unictype/test-categ_M.c +++ b/tests/unictype/test-categ_M.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Mc.c b/tests/unictype/test-categ_Mc.c index 1b2b50cf..bfa9ce15 100644 --- a/tests/unictype/test-categ_Mc.c +++ b/tests/unictype/test-categ_Mc.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Me.c b/tests/unictype/test-categ_Me.c index d0ad5427..c58d2972 100644 --- a/tests/unictype/test-categ_Me.c +++ b/tests/unictype/test-categ_Me.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Mn.c b/tests/unictype/test-categ_Mn.c index cff7fde2..ee067b33 100644 --- a/tests/unictype/test-categ_Mn.c +++ b/tests/unictype/test-categ_Mn.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_N.c b/tests/unictype/test-categ_N.c index ae8945c1..f7ee20ae 100644 --- a/tests/unictype/test-categ_N.c +++ b/tests/unictype/test-categ_N.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Nd.c b/tests/unictype/test-categ_Nd.c index 470c54e4..032ab3eb 100644 --- a/tests/unictype/test-categ_Nd.c +++ b/tests/unictype/test-categ_Nd.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Nl.c b/tests/unictype/test-categ_Nl.c index 55dc61bb..0ce75df2 100644 --- a/tests/unictype/test-categ_Nl.c +++ b/tests/unictype/test-categ_Nl.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_No.c b/tests/unictype/test-categ_No.c index 4d368b91..0c1e8e59 100644 --- a/tests/unictype/test-categ_No.c +++ b/tests/unictype/test-categ_No.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_P.c b/tests/unictype/test-categ_P.c index f2e8532b..c2a2a92f 100644 --- a/tests/unictype/test-categ_P.c +++ b/tests/unictype/test-categ_P.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pc.c b/tests/unictype/test-categ_Pc.c index 9d0ae7dc..98b32745 100644 --- a/tests/unictype/test-categ_Pc.c +++ b/tests/unictype/test-categ_Pc.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pd.c b/tests/unictype/test-categ_Pd.c index d27a409a..28f2b27d 100644 --- a/tests/unictype/test-categ_Pd.c +++ b/tests/unictype/test-categ_Pd.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pe.c b/tests/unictype/test-categ_Pe.c index 7dda519b..d1ae40ea 100644 --- a/tests/unictype/test-categ_Pe.c +++ b/tests/unictype/test-categ_Pe.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pf.c b/tests/unictype/test-categ_Pf.c index 68cdb407..6746b530 100644 --- a/tests/unictype/test-categ_Pf.c +++ b/tests/unictype/test-categ_Pf.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pi.c b/tests/unictype/test-categ_Pi.c index bd8d5ebe..ee16d684 100644 --- a/tests/unictype/test-categ_Pi.c +++ b/tests/unictype/test-categ_Pi.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Po.c b/tests/unictype/test-categ_Po.c index 53a782f5..27389e40 100644 --- a/tests/unictype/test-categ_Po.c +++ b/tests/unictype/test-categ_Po.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Ps.c b/tests/unictype/test-categ_Ps.c index e423e409..78bebac2 100644 --- a/tests/unictype/test-categ_Ps.c +++ b/tests/unictype/test-categ_Ps.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_S.c b/tests/unictype/test-categ_S.c index d1312da5..48863da0 100644 --- a/tests/unictype/test-categ_S.c +++ b/tests/unictype/test-categ_S.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -124,7 +124,7 @@ { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, - { 0x2FF0, 0x2FFB }, + { 0x2FF0, 0x2FFF }, { 0x3004, 0x3004 }, { 0x3012, 0x3013 }, { 0x3020, 0x3020 }, @@ -134,6 +134,7 @@ { 0x3190, 0x3191 }, { 0x3196, 0x319F }, { 0x31C0, 0x31E3 }, + { 0x31EF, 0x31EF }, { 0x3200, 0x321E }, { 0x322A, 0x3247 }, { 0x3250, 0x3250 }, diff --git a/tests/unictype/test-categ_Sc.c b/tests/unictype/test-categ_Sc.c index 9057fa9f..4c30fbf1 100644 --- a/tests/unictype/test-categ_Sc.c +++ b/tests/unictype/test-categ_Sc.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Sk.c b/tests/unictype/test-categ_Sk.c index cf8f781d..efffb564 100644 --- a/tests/unictype/test-categ_Sk.c +++ b/tests/unictype/test-categ_Sk.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Sm.c b/tests/unictype/test-categ_Sm.c index 02a70194..ae3d01c3 100644 --- a/tests/unictype/test-categ_Sm.c +++ b/tests/unictype/test-categ_Sm.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_So.c b/tests/unictype/test-categ_So.c index 4f9b3eae..98f774f7 100644 --- a/tests/unictype/test-categ_So.c +++ b/tests/unictype/test-categ_So.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -103,7 +103,7 @@ { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, - { 0x2FF0, 0x2FFB }, + { 0x2FF0, 0x2FFF }, { 0x3004, 0x3004 }, { 0x3012, 0x3013 }, { 0x3020, 0x3020 }, @@ -112,6 +112,7 @@ { 0x3190, 0x3191 }, { 0x3196, 0x319F }, { 0x31C0, 0x31E3 }, + { 0x31EF, 0x31EF }, { 0x3200, 0x321E }, { 0x322A, 0x3247 }, { 0x3250, 0x3250 }, diff --git a/tests/unictype/test-categ_Z.c b/tests/unictype/test-categ_Z.c index 3e0ec555..20301158 100644 --- a/tests/unictype/test-categ_Z.c +++ b/tests/unictype/test-categ_Z.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Zl.c b/tests/unictype/test-categ_Zl.c index 92725a57..25047987 100644 --- a/tests/unictype/test-categ_Zl.c +++ b/tests/unictype/test-categ_Zl.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Zp.c b/tests/unictype/test-categ_Zp.c index 2c69c6cc..520cf39e 100644 --- a/tests/unictype/test-categ_Zp.c +++ b/tests/unictype/test-categ_Zp.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Zs.c b/tests/unictype/test-categ_Zs.c index da8a54b5..9a218493 100644 --- a/tests/unictype/test-categ_Zs.c +++ b/tests/unictype/test-categ_Zs.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_and.c b/tests/unictype/test-categ_and.c index ace3ccb8..e2ded585 100644 --- a/tests/unictype/test-categ_and.c +++ b/tests/unictype/test-categ_and.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_and_not.c b/tests/unictype/test-categ_and_not.c index 74c75aee..07420d53 100644 --- a/tests/unictype/test-categ_and_not.c +++ b/tests/unictype/test-categ_and_not.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,15 +25,36 @@ int main () { - uc_general_category_t ct = - uc_general_category_and_not ( - uc_general_category_or (UC_LETTER, UC_NUMBER), - uc_general_category_or (UC_UPPERCASE_LETTER, UC_DECIMAL_DIGIT_NUMBER)); - - ASSERT (!uc_is_general_category ('A', ct)); - ASSERT (uc_is_general_category ('a', ct)); - ASSERT (!uc_is_general_category ('7', ct)); - ASSERT (uc_is_general_category (0x00B2, ct)); + { /* A case where the result's bit mask is 0. */ + uc_general_category_t ct = + uc_general_category_and_not (UC_UPPERCASE_LETTER, UC_LETTER); + + ASSERT (!uc_is_general_category ('A', ct)); + ASSERT (!uc_is_general_category ('a', ct)); + } + { /* A case where the result's bit mask is the same as the first argument. */ + uc_general_category_t ct = + uc_general_category_and_not ( + uc_general_category_or (UC_LETTER, UC_NUMBER), + UC_CONTROL); + + ASSERT (uc_is_general_category ('A', ct)); + ASSERT (uc_is_general_category ('a', ct)); + ASSERT (uc_is_general_category ('7', ct)); + ASSERT (uc_is_general_category (0x00B2, ct)); + } + { /* The general case, where the result's bit mask is neither 0 nor the first + argument. */ + uc_general_category_t ct = + uc_general_category_and_not ( + uc_general_category_or (UC_LETTER, UC_NUMBER), + uc_general_category_or (UC_UPPERCASE_LETTER, UC_DECIMAL_DIGIT_NUMBER)); + + ASSERT (!uc_is_general_category ('A', ct)); + ASSERT (uc_is_general_category ('a', ct)); + ASSERT (!uc_is_general_category ('7', ct)); + ASSERT (uc_is_general_category (0x00B2, ct)); + } return 0; } diff --git a/tests/unictype/test-categ_byname.c b/tests/unictype/test-categ_byname.c index 2489caaa..8cf94f4a 100644 --- a/tests/unictype/test-categ_byname.c +++ b/tests/unictype/test-categ_byname.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2011 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -206,8 +206,6 @@ main () ASSERT (category_equals (uc_general_category_byname ("UNASSIGNED"), UC_CATEGORY_Cn)); ASSERT (category_equals (uc_general_category_byname ("Unassigned"), UC_CATEGORY_Cn)); - uc_general_category_byname ("Nl"); - { uc_general_category_t ct = uc_general_category_byname ("Nd"); unsigned int c; @@ -219,6 +217,16 @@ main () } { + uc_general_category_t ct = uc_general_category_byname ("Nl"); + unsigned int c; + + for (c = 0x2160; c < 0x2180; c++) + ASSERT (uc_is_general_category (c, ct)); + ASSERT (!uc_is_general_category (0x0BF1, ct)); + ASSERT (!uc_is_general_category (0x0D71, ct)); + } + + { uc_general_category_t ct = uc_general_category_byname ("Foo"); unsigned int c; diff --git a/tests/unictype/test-categ_longname.c b/tests/unictype/test-categ_longname.c index d332b280..9c725486 100644 --- a/tests/unictype/test-categ_longname.c +++ b/tests/unictype/test-categ_longname.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_name.c b/tests/unictype/test-categ_name.c index 4e5143bb..f8f4889e 100644 --- a/tests/unictype/test-categ_name.c +++ b/tests/unictype/test-categ_name.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_none.c b/tests/unictype/test-categ_none.c index 913011a5..ae10a439 100644 --- a/tests/unictype/test-categ_none.c +++ b/tests/unictype/test-categ_none.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_of.c b/tests/unictype/test-categ_of.c index d19a510c..276994eb 100644 --- a/tests/unictype/test-categ_of.c +++ b/tests/unictype/test-categ_of.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_or.c b/tests/unictype/test-categ_or.c index 3fd9bd5a..3ed5d2b0 100644 --- a/tests/unictype/test-categ_or.c +++ b/tests/unictype/test-categ_or.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_test_withtable.c b/tests/unictype/test-categ_test_withtable.c index df25cb87..fbd265a5 100644 --- a/tests/unictype/test-categ_test_withtable.c +++ b/tests/unictype/test-categ_test_withtable.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-combiningclass.c b/tests/unictype/test-combiningclass.c index 92348feb..0e71d022 100644 --- a/tests/unictype/test-combiningclass.c +++ b/tests/unictype/test-combiningclass.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-combiningclass_byname.c b/tests/unictype/test-combiningclass_byname.c index 0d56ca34..895b2ad1 100644 --- a/tests/unictype/test-combiningclass_byname.c +++ b/tests/unictype/test-combiningclass_byname.c @@ -1,5 +1,5 @@ /* Test the Unicode character Arabic joining group functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-combiningclass_longname.c b/tests/unictype/test-combiningclass_longname.c index 29164624..351467b8 100644 --- a/tests/unictype/test-combiningclass_longname.c +++ b/tests/unictype/test-combiningclass_longname.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-combiningclass_name.c b/tests/unictype/test-combiningclass_name.c index 6521976a..7ccefbf2 100644 --- a/tests/unictype/test-combiningclass_name.c +++ b/tests/unictype/test-combiningclass_name.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-ctype_alnum.c b/tests/unictype/test-ctype_alnum.c index 7947a92b..f6f9b6b2 100644 --- a/tests/unictype/test-ctype_alnum.c +++ b/tests/unictype/test-ctype_alnum.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -730,6 +730,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-ctype_alpha.c b/tests/unictype/test-ctype_alpha.c index 284d964e..cb52a4c1 100644 --- a/tests/unictype/test-ctype_alpha.c +++ b/tests/unictype/test-ctype_alpha.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -729,6 +729,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-ctype_blank.c b/tests/unictype/test-ctype_blank.c index 4824fe73..a95128bc 100644 --- a/tests/unictype/test-ctype_blank.c +++ b/tests/unictype/test-ctype_blank.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_cntrl.c b/tests/unictype/test-ctype_cntrl.c index d32c701d..9c23169a 100644 --- a/tests/unictype/test-ctype_cntrl.c +++ b/tests/unictype/test-ctype_cntrl.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_digit.c b/tests/unictype/test-ctype_digit.c index ccda557f..53d40121 100644 --- a/tests/unictype/test-ctype_digit.c +++ b/tests/unictype/test-ctype_digit.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_graph.c b/tests/unictype/test-ctype_graph.c index 16ab878a..bdd12a07 100644 --- a/tests/unictype/test-ctype_graph.c +++ b/tests/unictype/test-ctype_graph.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -291,14 +291,14 @@ { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, - { 0x2FF0, 0x2FFB }, + { 0x2FF0, 0x2FFF }, { 0x3001, 0x303F }, { 0x3041, 0x3096 }, { 0x3099, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x3190, 0x31E3 }, - { 0x31F0, 0x321E }, + { 0x31EF, 0x321E }, { 0x3220, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, @@ -721,6 +721,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF }, diff --git a/tests/unictype/test-ctype_lower.c b/tests/unictype/test-ctype_lower.c index f8fceb33..5bc56a9b 100644 --- a/tests/unictype/test-ctype_lower.c +++ b/tests/unictype/test-ctype_lower.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_print.c b/tests/unictype/test-ctype_print.c index dad6b07b..a7ae3cd9 100644 --- a/tests/unictype/test-ctype_print.c +++ b/tests/unictype/test-ctype_print.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -288,14 +288,13 @@ { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, - { 0x2FF0, 0x2FFB }, - { 0x3000, 0x303F }, + { 0x2FF0, 0x303F }, { 0x3041, 0x3096 }, { 0x3099, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x3190, 0x31E3 }, - { 0x31F0, 0x321E }, + { 0x31EF, 0x321E }, { 0x3220, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, @@ -718,6 +717,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF }, diff --git a/tests/unictype/test-ctype_punct.c b/tests/unictype/test-ctype_punct.c index 1cd20e2a..1bebda2c 100644 --- a/tests/unictype/test-ctype_punct.c +++ b/tests/unictype/test-ctype_punct.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -265,7 +265,7 @@ { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, - { 0x2FF0, 0x2FFB }, + { 0x2FF0, 0x2FFF }, { 0x3001, 0x3004 }, { 0x3008, 0x3020 }, { 0x302A, 0x3030 }, @@ -276,6 +276,7 @@ { 0x30FB, 0x30FB }, { 0x3190, 0x319F }, { 0x31C0, 0x31E3 }, + { 0x31EF, 0x31EF }, { 0x3200, 0x321E }, { 0x3220, 0x33FF }, { 0x4DC0, 0x4DFF }, diff --git a/tests/unictype/test-ctype_space.c b/tests/unictype/test-ctype_space.c index da37cf74..2029e960 100644 --- a/tests/unictype/test-ctype_space.c +++ b/tests/unictype/test-ctype_space.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_upper.c b/tests/unictype/test-ctype_upper.c index 724d4c7c..c8e45155 100644 --- a/tests/unictype/test-ctype_upper.c +++ b/tests/unictype/test-ctype_upper.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_xdigit.c b/tests/unictype/test-ctype_xdigit.c index 3de8ce98..cbc618fc 100644 --- a/tests/unictype/test-ctype_xdigit.c +++ b/tests/unictype/test-ctype_xdigit.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-decdigit.c b/tests/unictype/test-decdigit.c index 67a3f60c..e3b70470 100644 --- a/tests/unictype/test-decdigit.c +++ b/tests/unictype/test-decdigit.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-decdigit.h b/tests/unictype/test-decdigit.h index f54ff1e1..c0a46e6c 100644 --- a/tests/unictype/test-decdigit.h +++ b/tests/unictype/test-decdigit.h @@ -1,8 +1,8 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Decimal digit values of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0. */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-digit.c b/tests/unictype/test-digit.c index 67258a43..12fa387d 100644 --- a/tests/unictype/test-digit.c +++ b/tests/unictype/test-digit.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-digit.h b/tests/unictype/test-digit.h index 02819012..503b2f41 100644 --- a/tests/unictype/test-digit.h +++ b/tests/unictype/test-digit.h @@ -1,8 +1,8 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Digit values of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0. */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-incb_byname.c b/tests/unictype/test-incb_byname.c new file mode 100644 index 00000000..5031d313 --- /dev/null +++ b/tests/unictype/test-incb_byname.c @@ -0,0 +1,43 @@ +/* Test the Indic_Conjunct_Break value functions. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2024. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "unictype.h" + +#include <string.h> + +#include "macros.h" + +int +main () +{ + ASSERT (uc_indic_conjunct_break_byname ("NONE") == UC_INDIC_CONJUNCT_BREAK_NONE); + ASSERT (uc_indic_conjunct_break_byname ("None") == UC_INDIC_CONJUNCT_BREAK_NONE); + ASSERT (uc_indic_conjunct_break_byname ("CONSONANT") == UC_INDIC_CONJUNCT_BREAK_CONSONANT); + ASSERT (uc_indic_conjunct_break_byname ("Consonant") == UC_INDIC_CONJUNCT_BREAK_CONSONANT); + ASSERT (uc_indic_conjunct_break_byname ("LINKER") == UC_INDIC_CONJUNCT_BREAK_LINKER); + ASSERT (uc_indic_conjunct_break_byname ("Linker") == UC_INDIC_CONJUNCT_BREAK_LINKER); + ASSERT (uc_indic_conjunct_break_byname ("EXTEND") == UC_INDIC_CONJUNCT_BREAK_EXTEND); + ASSERT (uc_indic_conjunct_break_byname ("Extend") == UC_INDIC_CONJUNCT_BREAK_EXTEND); + ASSERT (uc_indic_conjunct_break_byname ("VOWEL") < 0); + ASSERT (uc_indic_conjunct_break_byname ("X") < 0); + ASSERT (uc_indic_conjunct_break_byname ("") < 0); + + return 0; +} diff --git a/tests/unictype/test-incb_name.c b/tests/unictype/test-incb_name.c new file mode 100644 index 00000000..25f53c28 --- /dev/null +++ b/tests/unictype/test-incb_name.c @@ -0,0 +1,37 @@ +/* Test the Indic_Conjunct_Break value functions. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2024. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "unictype.h" + +#include <string.h> + +#include "macros.h" + +int +main () +{ + ASSERT (strcmp (uc_indic_conjunct_break_name (UC_INDIC_CONJUNCT_BREAK_NONE), "None") == 0); + ASSERT (strcmp (uc_indic_conjunct_break_name (UC_INDIC_CONJUNCT_BREAK_CONSONANT), "Consonant") == 0); + ASSERT (strcmp (uc_indic_conjunct_break_name (UC_INDIC_CONJUNCT_BREAK_LINKER), "Linker") == 0); + ASSERT (strcmp (uc_indic_conjunct_break_name (UC_INDIC_CONJUNCT_BREAK_EXTEND), "Extend") == 0); + ASSERT (uc_indic_conjunct_break_name (-1) == NULL); + + return 0; +} diff --git a/tests/unictype/test-incb_of.c b/tests/unictype/test-incb_of.c new file mode 100644 index 00000000..d2adeb5c --- /dev/null +++ b/tests/unictype/test-incb_of.c @@ -0,0 +1,52 @@ +/* Test the Unicode character Indic_Conjunct_Break attribute functions. + Copyright (C) 2011-2024 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2024. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "unictype.h" + +#include <string.h> + +#include "macros.h" + +typedef struct { ucs4_t ch; int value; } pair_t; + +static const pair_t mapping[] = + { +#include "test-incb_of.h" + }; + +int +main () +{ + unsigned int c; + size_t i; + + c = 0; + for (i = 0; i < SIZEOF (mapping); i++) + { + for (; c < mapping[i].ch; c++) + ASSERT (uc_indic_conjunct_break (c) == UC_INDIC_CONJUNCT_BREAK_NONE); + ASSERT (uc_indic_conjunct_break (c) == mapping[i].value); + c++; + } + for (; c < 0x110000; c++) + ASSERT (uc_indic_conjunct_break (c) == UC_INDIC_CONJUNCT_BREAK_NONE); + + return 0; +} diff --git a/tests/unictype/test-incb_of.h b/tests/unictype/test-incb_of.h new file mode 100644 index 00000000..0eb99aaf --- /dev/null +++ b/tests/unictype/test-incb_of.h @@ -0,0 +1,1149 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Indic_Conjunct_Break attribute of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + + { 0x0300, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0301, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0302, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0303, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0304, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0305, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0306, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0307, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0308, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0309, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x030A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x030B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x030C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x030D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x030E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x030F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0310, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0311, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0312, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0313, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0314, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0315, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0316, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0317, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0318, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0319, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x031A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x031B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x031C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x031D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x031E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x031F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0320, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0321, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0322, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0323, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0324, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0325, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0326, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0327, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0328, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0329, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x032A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x032B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x032C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x032D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x032E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x032F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0330, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0331, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0332, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0333, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0334, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0335, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0336, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0337, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0338, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0339, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x033A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x033B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x033C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x033D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x033E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x033F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0340, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0341, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0342, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0343, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0344, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0345, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0346, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0347, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0348, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0349, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x034A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x034B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x034C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x034D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x034E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0350, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0351, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0352, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0353, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0354, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0355, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0356, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0357, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0358, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0359, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x035A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x035B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x035C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x035D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x035E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x035F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0360, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0361, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0362, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0363, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0364, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0365, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0366, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0367, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0368, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0369, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x036A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x036B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x036C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x036D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x036E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x036F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0483, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0484, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0485, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0486, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0487, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0591, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0592, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0593, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0594, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0595, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0596, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0597, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0598, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0599, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x059A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x059B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x059C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x059D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x059E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x059F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05A9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05AA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05AB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05AC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05AD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05AE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05AF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05B9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05BA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05BB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05BC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05BD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05BF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05C1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05C2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05C4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05C5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x05C7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0610, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0611, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0612, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0613, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0614, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0615, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0616, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0617, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0618, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0619, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x061A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x064B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x064C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x064D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x064E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x064F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0650, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0651, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0652, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0653, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0654, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0655, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0656, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0657, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0658, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0659, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x065A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x065B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x065C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x065D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x065E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x065F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0670, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06D6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06D7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06D8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06D9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06DA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06DB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06DC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06DF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06E0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06E1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06E2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06E3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06E4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06E7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06E8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x06ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0711, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0730, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0731, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0732, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0733, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0734, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0735, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0736, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0737, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0738, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0739, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x073A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x073B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x073C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x073D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x073E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x073F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0740, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0741, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0742, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0743, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0744, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0745, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0746, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0747, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0748, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0749, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x074A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07F1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07F2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07F3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x07FD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0816, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0817, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0818, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0819, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x081B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x081C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x081D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x081E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x081F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0820, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0821, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0822, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0823, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0825, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0826, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0827, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0829, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x082A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x082B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x082C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x082D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0859, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x085A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x085B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0898, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0899, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x089A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x089B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x089C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x089D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x089E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x089F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08CA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08CB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08CC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08CD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08CE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08CF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08D9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08DA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08DB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08DC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08DD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08DE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08DF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08E0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08E1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08E3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08E4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08E5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08E6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08E7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08E8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08E9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08F9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08FA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08FB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08FC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08FD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08FE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x08FF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0915, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0916, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0917, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0918, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0919, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x091A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x091B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x091C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x091D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x091E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x091F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0920, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0921, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0922, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0923, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0924, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0925, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0926, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0927, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0928, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0929, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x092A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x092B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x092C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x092D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x092E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x092F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0930, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0931, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0932, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0933, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0934, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0935, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0936, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0937, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0938, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0939, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x093C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x094D, UC_INDIC_CONJUNCT_BREAK_LINKER }, + { 0x0951, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0952, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0953, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0954, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0958, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0959, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x095A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x095B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x095C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x095D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x095E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x095F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0978, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0979, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x097A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x097B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x097C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x097D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x097E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x097F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0995, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0996, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0997, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0998, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0999, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x099A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x099B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x099C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x099D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x099E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x099F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09A0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09A1, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09A2, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09A3, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09A4, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09A5, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09A6, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09A7, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09A8, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09AA, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09AB, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09AC, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09AD, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09AE, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09AF, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09B0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09B2, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09B6, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09B7, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09B8, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09B9, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09BC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x09CD, UC_INDIC_CONJUNCT_BREAK_LINKER }, + { 0x09DC, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09DD, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09DF, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09F0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09F1, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x09FE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0A3C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0A95, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A96, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A97, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A98, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A99, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A9A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A9B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A9C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A9D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A9E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0A9F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AA0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AA1, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AA2, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AA3, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AA4, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AA5, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AA6, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AA7, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AA8, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AAA, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AAB, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AAC, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AAD, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AAE, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AAF, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AB0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AB2, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AB3, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AB5, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AB6, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AB7, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AB8, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0AB9, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0ABC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0ACD, UC_INDIC_CONJUNCT_BREAK_LINKER }, + { 0x0AF9, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B15, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B16, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B17, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B18, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B19, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B1A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B1B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B1C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B1D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B1E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B1F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B20, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B21, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B22, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B23, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B24, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B25, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B26, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B27, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B28, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B2A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B2B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B2C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B2D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B2E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B2F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B30, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B32, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B33, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B35, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B36, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B37, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B38, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B39, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B3C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0B4D, UC_INDIC_CONJUNCT_BREAK_LINKER }, + { 0x0B5C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B5D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B5F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0B71, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C15, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C16, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C17, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C18, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C19, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C1A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C1B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C1C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C1D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C1E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C1F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C20, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C21, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C22, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C23, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C24, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C25, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C26, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C27, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C28, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C2A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C2B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C2C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C2D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C2E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C2F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C30, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C31, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C32, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C33, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C34, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C35, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C36, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C37, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C38, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C39, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C3C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0C4D, UC_INDIC_CONJUNCT_BREAK_LINKER }, + { 0x0C55, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0C56, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0C58, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C59, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0C5A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0CBC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0D15, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D16, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D17, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D18, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D19, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D1A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D1B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D1C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D1D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D1E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D1F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D20, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D21, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D22, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D23, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D24, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D25, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D26, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D27, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D28, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D29, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D2A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D2B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D2C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D2D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D2E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D2F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D30, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D31, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D32, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D33, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D34, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D35, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D36, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D37, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D38, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D39, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D3A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, + { 0x0D3B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0D3C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0D4D, UC_INDIC_CONJUNCT_BREAK_LINKER }, + { 0x0E38, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0E39, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0E3A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0E48, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0E49, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0E4A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0E4B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0EB8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0EB9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0EBA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0EC8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0EC9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0ECA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0ECB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F18, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F19, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F35, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F37, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F39, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F71, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F72, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F74, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F7A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F7B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F7C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F7D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F80, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F82, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F83, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F84, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F86, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0F87, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x0FC6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1037, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1039, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x103A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x108D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x135D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x135E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x135F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1714, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x17D2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x17DD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x18A9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1939, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x193A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x193B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A17, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A18, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A60, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A75, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A76, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A77, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A78, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A79, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A7A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A7B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A7C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1A7F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AB9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ABA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ABB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ABC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ABD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ABF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1AC9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ACA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ACB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ACC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ACD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1ACE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B34, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B6B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B6C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B6D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B6E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B6F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B70, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B71, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B72, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1B73, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1BAB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1BE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1C37, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CD0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CD1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CD2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CD4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CD5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CD6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CD7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CD8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CD9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CDA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CDB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CDC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CDD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CDE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CDF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CE0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CE2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CE3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CE4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CE5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CE7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CE8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CF4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CF8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1CF9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DC9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DCA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DCB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DCC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DCD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DCE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DCF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DD9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DDA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DDB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DDC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DDD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DDE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DDF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DE9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DEA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DEB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DEC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DEE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DEF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DF9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DFA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DFB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DFC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DFD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DFE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1DFF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x200D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20D9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20DA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20DB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20DC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20E1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20E5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20E6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20E7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20E8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20E9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x20F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2CEF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2CF0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2CF1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2D7F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DE9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DEA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DEB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DEC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DEE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DEF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DF9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DFA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DFB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DFC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DFD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DFE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x2DFF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x302A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x302B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x302C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x302D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x302E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x302F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x3099, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x309A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA66F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA674, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA675, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA676, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA677, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA678, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA679, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA67A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA67B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA67C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA67D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA69E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA69F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA6F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA6F1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA82C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8E9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA8F1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA92B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA92C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA92D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xA9B3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAAB0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAAB2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAAB3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAAB4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAAB7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAAB8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAABE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAABF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAAC1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xAAF6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xABED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFB1E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE20, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE21, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE22, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE23, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE24, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE25, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE26, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE27, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE28, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE29, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE2A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE2B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE2C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE2D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE2E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0xFE2F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x101FD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x102E0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10376, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10377, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10378, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10379, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1037A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10A0D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10A0F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10A38, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10A39, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10A3A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10A3F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10AE5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10AE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10D24, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10D25, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10D26, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10D27, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10EAB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10EAC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10EFD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10EFE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10EFF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F46, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F47, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F48, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F49, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F4A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F4B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F4C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F4D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F4E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F4F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F50, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F82, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F83, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F84, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x10F85, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11070, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1107F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x110BA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11100, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11101, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11102, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11133, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11134, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11173, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x111CA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11236, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x112E9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x112EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1133B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1133C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11366, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11367, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11368, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11369, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1136A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1136B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1136C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11370, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11371, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11372, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11373, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11374, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11446, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1145E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x114C3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x115C0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x116B7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1172B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1183A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1193E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11943, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11A34, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11A47, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11A99, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11D42, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11D44, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11D45, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11D97, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x11F42, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16AF0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16AF1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16AF2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16AF3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16AF4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16B30, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16B31, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16B32, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16B33, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16B34, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16B35, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x16B36, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1BC9E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D165, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D167, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D168, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D169, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D16E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D16F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D170, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D171, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D172, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D17B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D17C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D17D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D17E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D17F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D180, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D181, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D182, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D185, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D186, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D187, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D188, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D189, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D18A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D18B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D1AA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D1AB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D1AC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D1AD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D242, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D243, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1D244, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E000, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E001, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E002, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E003, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E004, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E005, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E006, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E008, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E009, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E00A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E00B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E00C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E00D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E00E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E00F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E010, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E011, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E012, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E013, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E014, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E015, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E016, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E017, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E018, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E01B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E01C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E01D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E01E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E01F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E020, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E021, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E023, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E024, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E026, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E027, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E028, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E029, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E02A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E08F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E130, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E131, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E132, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E133, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E134, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E135, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E136, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E2AE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E2EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E2ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E2EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E2EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E4EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E4ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E4EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E4EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E8D0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E8D1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E8D2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E8D3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E8D4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E8D5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E8D6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E944, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E945, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E946, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E947, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E948, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E949, UC_INDIC_CONJUNCT_BREAK_EXTEND }, + { 0x1E94A, UC_INDIC_CONJUNCT_BREAK_EXTEND } diff --git a/tests/unictype/test-joininggroup_byname.c b/tests/unictype/test-joininggroup_byname.c index 6329a994..24d5c19d 100644 --- a/tests/unictype/test-joininggroup_byname.c +++ b/tests/unictype/test-joininggroup_byname.c @@ -1,5 +1,5 @@ /* Test the Unicode character Arabic joining group functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joininggroup_name.c b/tests/unictype/test-joininggroup_name.c index 7ff2eb98..9e4ef511 100644 --- a/tests/unictype/test-joininggroup_name.c +++ b/tests/unictype/test-joininggroup_name.c @@ -1,5 +1,5 @@ /* Test the Unicode character Arabic joining group functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joininggroup_of.c b/tests/unictype/test-joininggroup_of.c index 792b5e37..65a70d5f 100644 --- a/tests/unictype/test-joininggroup_of.c +++ b/tests/unictype/test-joininggroup_of.c @@ -1,5 +1,5 @@ /* Test the Unicode character Arabic joining group functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joininggroup_of.h b/tests/unictype/test-joininggroup_of.h index cbcad6bc..1ee9c058 100644 --- a/tests/unictype/test-joininggroup_of.h +++ b/tests/unictype/test-joininggroup_of.h @@ -1,8 +1,8 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Arabic joining group of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0. */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-joiningtype_byname.c b/tests/unictype/test-joiningtype_byname.c index 0134bde1..ecde322e 100644 --- a/tests/unictype/test-joiningtype_byname.c +++ b/tests/unictype/test-joiningtype_byname.c @@ -1,5 +1,5 @@ /* Test the Unicode character Arabic joining type functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joiningtype_longname.c b/tests/unictype/test-joiningtype_longname.c index 06c737d4..3d18ae2f 100644 --- a/tests/unictype/test-joiningtype_longname.c +++ b/tests/unictype/test-joiningtype_longname.c @@ -1,5 +1,5 @@ /* Test the Unicode character Arabic joining type functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joiningtype_name.c b/tests/unictype/test-joiningtype_name.c index f83468cb..0b2ca424 100644 --- a/tests/unictype/test-joiningtype_name.c +++ b/tests/unictype/test-joiningtype_name.c @@ -1,5 +1,5 @@ /* Test the Unicode character Arabic joining type functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joiningtype_of.c b/tests/unictype/test-joiningtype_of.c index 6396f0d3..f0760b91 100644 --- a/tests/unictype/test-joiningtype_of.c +++ b/tests/unictype/test-joiningtype_of.c @@ -1,5 +1,5 @@ /* Test the Unicode character Arabic joining type functions. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joiningtype_of.h b/tests/unictype/test-joiningtype_of.h index acea2865..7b1e072a 100644 --- a/tests/unictype/test-joiningtype_of.h +++ b/tests/unictype/test-joiningtype_of.h @@ -1,8 +1,8 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Arabic joining type of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0. */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-mirror.c b/tests/unictype/test-mirror.c index b09541cc..5494e197 100644 --- a/tests/unictype/test-mirror.c +++ b/tests/unictype/test-mirror.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-numeric.c b/tests/unictype/test-numeric.c index 5596b561..86718bf2 100644 --- a/tests/unictype/test-numeric.c +++ b/tests/unictype/test-numeric.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-numeric.h b/tests/unictype/test-numeric.h index cb2f3314..b8a7f809 100644 --- a/tests/unictype/test-numeric.h +++ b/tests/unictype/test-numeric.h @@ -1,8 +1,8 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Numeric values of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0. */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_alphabetic.c b/tests/unictype/test-pr_alphabetic.c index 6efcd5bd..027b3a01 100644 --- a/tests/unictype/test-pr_alphabetic.c +++ b/tests/unictype/test-pr_alphabetic.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -746,6 +746,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_ascii_hex_digit.c b/tests/unictype/test-pr_ascii_hex_digit.c index 31eb2b79..bc48da86 100644 --- a/tests/unictype/test-pr_ascii_hex_digit.c +++ b/tests/unictype/test-pr_ascii_hex_digit.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_arabic_digit.c b/tests/unictype/test-pr_bidi_arabic_digit.c index fde69de6..10e6bf03 100644 --- a/tests/unictype/test-pr_bidi_arabic_digit.c +++ b/tests/unictype/test-pr_bidi_arabic_digit.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_arabic_right_to_left.c b/tests/unictype/test-pr_bidi_arabic_right_to_left.c index e0cde250..d97eb529 100644 --- a/tests/unictype/test-pr_bidi_arabic_right_to_left.c +++ b/tests/unictype/test-pr_bidi_arabic_right_to_left.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_block_separator.c b/tests/unictype/test-pr_bidi_block_separator.c index b348d689..50eade74 100644 --- a/tests/unictype/test-pr_bidi_block_separator.c +++ b/tests/unictype/test-pr_bidi_block_separator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_boundary_neutral.c b/tests/unictype/test-pr_bidi_boundary_neutral.c index 778d8247..8925fb22 100644 --- a/tests/unictype/test-pr_bidi_boundary_neutral.c +++ b/tests/unictype/test-pr_bidi_boundary_neutral.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_common_separator.c b/tests/unictype/test-pr_bidi_common_separator.c index 75e54c7f..7f73de79 100644 --- a/tests/unictype/test-pr_bidi_common_separator.c +++ b/tests/unictype/test-pr_bidi_common_separator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_control.c b/tests/unictype/test-pr_bidi_control.c index 60f1354e..5855b93c 100644 --- a/tests/unictype/test-pr_bidi_control.c +++ b/tests/unictype/test-pr_bidi_control.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_embedding_or_override.c b/tests/unictype/test-pr_bidi_embedding_or_override.c index 3fec8c05..e717b92a 100644 --- a/tests/unictype/test-pr_bidi_embedding_or_override.c +++ b/tests/unictype/test-pr_bidi_embedding_or_override.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_eur_num_separator.c b/tests/unictype/test-pr_bidi_eur_num_separator.c index 2a096694..c7a602f2 100644 --- a/tests/unictype/test-pr_bidi_eur_num_separator.c +++ b/tests/unictype/test-pr_bidi_eur_num_separator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_eur_num_terminator.c b/tests/unictype/test-pr_bidi_eur_num_terminator.c index 326d6fa0..0ed7ebb0 100644 --- a/tests/unictype/test-pr_bidi_eur_num_terminator.c +++ b/tests/unictype/test-pr_bidi_eur_num_terminator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_european_digit.c b/tests/unictype/test-pr_bidi_european_digit.c index b59bc8cb..3f72d04c 100644 --- a/tests/unictype/test-pr_bidi_european_digit.c +++ b/tests/unictype/test-pr_bidi_european_digit.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_hebrew_right_to_left.c b/tests/unictype/test-pr_bidi_hebrew_right_to_left.c index 90dfa1e6..f6b97339 100644 --- a/tests/unictype/test-pr_bidi_hebrew_right_to_left.c +++ b/tests/unictype/test-pr_bidi_hebrew_right_to_left.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_left_to_right.c b/tests/unictype/test-pr_bidi_left_to_right.c index ce6dc5d7..3a81b5ec 100644 --- a/tests/unictype/test-pr_bidi_left_to_right.c +++ b/tests/unictype/test-pr_bidi_left_to_right.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -233,7 +233,6 @@ { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, - { 0x2FFC, 0x2FFF }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 0x302E, 0x302F }, @@ -243,7 +242,8 @@ { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x31BF }, - { 0x31E4, 0x321C }, + { 0x31E4, 0x31EE }, + { 0x31F0, 0x321C }, { 0x321F, 0x324F }, { 0x3260, 0x327B }, { 0x327F, 0x32B0 }, diff --git a/tests/unictype/test-pr_bidi_non_spacing_mark.c b/tests/unictype/test-pr_bidi_non_spacing_mark.c index 6cc88022..813373ac 100644 --- a/tests/unictype/test-pr_bidi_non_spacing_mark.c +++ b/tests/unictype/test-pr_bidi_non_spacing_mark.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_other_neutral.c b/tests/unictype/test-pr_bidi_other_neutral.c index 5d72a797..0c968235 100644 --- a/tests/unictype/test-pr_bidi_other_neutral.c +++ b/tests/unictype/test-pr_bidi_other_neutral.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -102,7 +102,7 @@ { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, - { 0x2FF0, 0x2FFB }, + { 0x2FF0, 0x2FFF }, { 0x3001, 0x3004 }, { 0x3008, 0x3020 }, { 0x3030, 0x3030 }, @@ -112,6 +112,7 @@ { 0x30A0, 0x30A0 }, { 0x30FB, 0x30FB }, { 0x31C0, 0x31E3 }, + { 0x31EF, 0x31EF }, { 0x321D, 0x321E }, { 0x3250, 0x325F }, { 0x327C, 0x327E }, diff --git a/tests/unictype/test-pr_bidi_pdf.c b/tests/unictype/test-pr_bidi_pdf.c index 60e45477..eabf3f29 100644 --- a/tests/unictype/test-pr_bidi_pdf.c +++ b/tests/unictype/test-pr_bidi_pdf.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_segment_separator.c b/tests/unictype/test-pr_bidi_segment_separator.c index 5f6e1e20..8e4da46a 100644 --- a/tests/unictype/test-pr_bidi_segment_separator.c +++ b/tests/unictype/test-pr_bidi_segment_separator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_whitespace.c b/tests/unictype/test-pr_bidi_whitespace.c index 3c165aa3..d4a47fd9 100644 --- a/tests/unictype/test-pr_bidi_whitespace.c +++ b/tests/unictype/test-pr_bidi_whitespace.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_byname.c b/tests/unictype/test-pr_byname.c index 6cdfb9d5..a3435e26 100644 --- a/tests/unictype/test-pr_byname.c +++ b/tests/unictype/test-pr_byname.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-pr_case_ignorable.c b/tests/unictype/test-pr_case_ignorable.c index 558694d0..b0f33ab9 100644 --- a/tests/unictype/test-pr_case_ignorable.c +++ b/tests/unictype/test-pr_case_ignorable.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_cased.c b/tests/unictype/test-pr_cased.c index 1d060fca..d1966ad7 100644 --- a/tests/unictype/test-pr_cased.c +++ b/tests/unictype/test-pr_cased.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_casefolded.c b/tests/unictype/test-pr_changes_when_casefolded.c index f0da0167..7c7c5cea 100644 --- a/tests/unictype/test-pr_changes_when_casefolded.c +++ b/tests/unictype/test-pr_changes_when_casefolded.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_casemapped.c b/tests/unictype/test-pr_changes_when_casemapped.c index 42bfa219..c8e508b2 100644 --- a/tests/unictype/test-pr_changes_when_casemapped.c +++ b/tests/unictype/test-pr_changes_when_casemapped.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_lowercased.c b/tests/unictype/test-pr_changes_when_lowercased.c index 87607ec2..95a4b888 100644 --- a/tests/unictype/test-pr_changes_when_lowercased.c +++ b/tests/unictype/test-pr_changes_when_lowercased.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_titlecased.c b/tests/unictype/test-pr_changes_when_titlecased.c index 55f12684..2ce0e2bb 100644 --- a/tests/unictype/test-pr_changes_when_titlecased.c +++ b/tests/unictype/test-pr_changes_when_titlecased.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_uppercased.c b/tests/unictype/test-pr_changes_when_uppercased.c index 4b830f3e..ebbe3cf9 100644 --- a/tests/unictype/test-pr_changes_when_uppercased.c +++ b/tests/unictype/test-pr_changes_when_uppercased.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_combining.c b/tests/unictype/test-pr_combining.c index 31b8df04..bccf27d3 100644 --- a/tests/unictype/test-pr_combining.c +++ b/tests/unictype/test-pr_combining.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_composite.c b/tests/unictype/test-pr_composite.c index 4cccc8e8..054b7fc9 100644 --- a/tests/unictype/test-pr_composite.c +++ b/tests/unictype/test-pr_composite.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_currency_symbol.c b/tests/unictype/test-pr_currency_symbol.c index 4a59165f..7db0104a 100644 --- a/tests/unictype/test-pr_currency_symbol.c +++ b/tests/unictype/test-pr_currency_symbol.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_dash.c b/tests/unictype/test-pr_dash.c index 7ac4b3e8..5788ddbb 100644 --- a/tests/unictype/test-pr_dash.c +++ b/tests/unictype/test-pr_dash.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_decimal_digit.c b/tests/unictype/test-pr_decimal_digit.c index 45d5a6d4..aedacc94 100644 --- a/tests/unictype/test-pr_decimal_digit.c +++ b/tests/unictype/test-pr_decimal_digit.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_default_ignorable_code_point.c b/tests/unictype/test-pr_default_ignorable_code_point.c index e536671b..194dc915 100644 --- a/tests/unictype/test-pr_default_ignorable_code_point.c +++ b/tests/unictype/test-pr_default_ignorable_code_point.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_deprecated.c b/tests/unictype/test-pr_deprecated.c index 1df2bc59..ba1cbd2c 100644 --- a/tests/unictype/test-pr_deprecated.c +++ b/tests/unictype/test-pr_deprecated.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_diacritic.c b/tests/unictype/test-pr_diacritic.c index f5dc0a67..d4c20042 100644 --- a/tests/unictype/test-pr_diacritic.c +++ b/tests/unictype/test-pr_diacritic.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji.c b/tests/unictype/test-pr_emoji.c index 8df689a2..f6b7859d 100644 --- a/tests/unictype/test-pr_emoji.c +++ b/tests/unictype/test-pr_emoji.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji_component.c b/tests/unictype/test-pr_emoji_component.c index 38009fe3..af70bf48 100644 --- a/tests/unictype/test-pr_emoji_component.c +++ b/tests/unictype/test-pr_emoji_component.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji_modifier.c b/tests/unictype/test-pr_emoji_modifier.c index d298af72..1a60de9e 100644 --- a/tests/unictype/test-pr_emoji_modifier.c +++ b/tests/unictype/test-pr_emoji_modifier.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji_modifier_base.c b/tests/unictype/test-pr_emoji_modifier_base.c index 90430d38..e38058bb 100644 --- a/tests/unictype/test-pr_emoji_modifier_base.c +++ b/tests/unictype/test-pr_emoji_modifier_base.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji_presentation.c b/tests/unictype/test-pr_emoji_presentation.c index fd1b3043..fe6b3a20 100644 --- a/tests/unictype/test-pr_emoji_presentation.c +++ b/tests/unictype/test-pr_emoji_presentation.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_extended_pictographic.c b/tests/unictype/test-pr_extended_pictographic.c index 9fa0b3af..add58454 100644 --- a/tests/unictype/test-pr_extended_pictographic.c +++ b/tests/unictype/test-pr_extended_pictographic.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_extender.c b/tests/unictype/test-pr_extender.c index c2ec203b..886710f0 100644 --- a/tests/unictype/test-pr_extender.c +++ b/tests/unictype/test-pr_extender.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_format_control.c b/tests/unictype/test-pr_format_control.c index 0c2045a8..9a734c56 100644 --- a/tests/unictype/test-pr_format_control.c +++ b/tests/unictype/test-pr_format_control.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_grapheme_base.c b/tests/unictype/test-pr_grapheme_base.c index 3d908500..aeb6af9b 100644 --- a/tests/unictype/test-pr_grapheme_base.c +++ b/tests/unictype/test-pr_grapheme_base.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -369,15 +369,14 @@ { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, - { 0x2FF0, 0x2FFB }, - { 0x3000, 0x3029 }, + { 0x2FF0, 0x3029 }, { 0x3030, 0x303F }, { 0x3041, 0x3096 }, { 0x309B, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x3190, 0x31E3 }, - { 0x31F0, 0x321E }, + { 0x31EF, 0x321E }, { 0x3220, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, @@ -889,6 +888,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_grapheme_extend.c b/tests/unictype/test-pr_grapheme_extend.c index fb8e068d..d168a4ce 100644 --- a/tests/unictype/test-pr_grapheme_extend.c +++ b/tests/unictype/test-pr_grapheme_extend.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_grapheme_link.c b/tests/unictype/test-pr_grapheme_link.c index ce5c9039..3b741be4 100644 --- a/tests/unictype/test-pr_grapheme_link.c +++ b/tests/unictype/test-pr_grapheme_link.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_hex_digit.c b/tests/unictype/test-pr_hex_digit.c index 4c3d48c7..578b7c97 100644 --- a/tests/unictype/test-pr_hex_digit.c +++ b/tests/unictype/test-pr_hex_digit.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_hyphen.c b/tests/unictype/test-pr_hyphen.c index 351e98a7..b8a3238d 100644 --- a/tests/unictype/test-pr_hyphen.c +++ b/tests/unictype/test-pr_hyphen.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_id_compat_math_continue.c b/tests/unictype/test-pr_id_compat_math_continue.c new file mode 100644 index 00000000..c5ff0f34 --- /dev/null +++ b/tests/unictype/test-pr_id_compat_math_continue.c @@ -0,0 +1,40 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include "test-predicate-part1.h" + + { 0x00B2, 0x00B3 }, + { 0x00B9, 0x00B9 }, + { 0x2070, 0x2070 }, + { 0x2074, 0x207E }, + { 0x2080, 0x208E }, + { 0x2202, 0x2202 }, + { 0x2207, 0x2207 }, + { 0x221E, 0x221E }, + { 0x1D6C1, 0x1D6C1 }, + { 0x1D6DB, 0x1D6DB }, + { 0x1D6FB, 0x1D6FB }, + { 0x1D715, 0x1D715 }, + { 0x1D735, 0x1D735 }, + { 0x1D74F, 0x1D74F }, + { 0x1D76F, 0x1D76F }, + { 0x1D789, 0x1D789 }, + { 0x1D7A9, 0x1D7A9 }, + { 0x1D7C3, 0x1D7C3 } + +#define PREDICATE(c) uc_is_property_id_compat_math_continue (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_id_compat_math_start.c b/tests/unictype/test-pr_id_compat_math_start.c new file mode 100644 index 00000000..58848243 --- /dev/null +++ b/tests/unictype/test-pr_id_compat_math_start.c @@ -0,0 +1,35 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include "test-predicate-part1.h" + + { 0x2202, 0x2202 }, + { 0x2207, 0x2207 }, + { 0x221E, 0x221E }, + { 0x1D6C1, 0x1D6C1 }, + { 0x1D6DB, 0x1D6DB }, + { 0x1D6FB, 0x1D6FB }, + { 0x1D715, 0x1D715 }, + { 0x1D735, 0x1D735 }, + { 0x1D74F, 0x1D74F }, + { 0x1D76F, 0x1D76F }, + { 0x1D789, 0x1D789 }, + { 0x1D7A9, 0x1D7A9 }, + { 0x1D7C3, 0x1D7C3 } + +#define PREDICATE(c) uc_is_property_id_compat_math_start (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_id_continue.c b/tests/unictype/test-pr_id_continue.c index d72084de..39675ef1 100644 --- a/tests/unictype/test-pr_id_continue.c +++ b/tests/unictype/test-pr_id_continue.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -317,6 +317,7 @@ { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, + { 0x200C, 0x200D }, { 0x203F, 0x2040 }, { 0x2054, 0x2054 }, { 0x2071, 0x2071 }, @@ -361,8 +362,7 @@ { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x3099, 0x309F }, - { 0x30A1, 0x30FA }, - { 0x30FC, 0x30FF }, + { 0x30A1, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x31A0, 0x31BF }, @@ -440,7 +440,7 @@ { 0xFF21, 0xFF3A }, { 0xFF3F, 0xFF3F }, { 0xFF41, 0xFF5A }, - { 0xFF66, 0xFFBE }, + { 0xFF65, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, @@ -781,6 +781,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF }, diff --git a/tests/unictype/test-pr_id_start.c b/tests/unictype/test-pr_id_start.c index e8ccdf56..62bfc045 100644 --- a/tests/unictype/test-pr_id_start.c +++ b/tests/unictype/test-pr_id_start.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -673,6 +673,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_ideographic.c b/tests/unictype/test-pr_ideographic.c index 8221e37b..0d71c94c 100644 --- a/tests/unictype/test-pr_ideographic.c +++ b/tests/unictype/test-pr_ideographic.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -34,6 +34,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_ids_binary_operator.c b/tests/unictype/test-pr_ids_binary_operator.c index 50722c30..49383cc0 100644 --- a/tests/unictype/test-pr_ids_binary_operator.c +++ b/tests/unictype/test-pr_ids_binary_operator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -18,7 +18,8 @@ #include "test-predicate-part1.h" { 0x2FF0, 0x2FF1 }, - { 0x2FF4, 0x2FFB } + { 0x2FF4, 0x2FFD }, + { 0x31EF, 0x31EF } #define PREDICATE(c) uc_is_property_ids_binary_operator (c) #include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_ids_trinary_operator.c b/tests/unictype/test-pr_ids_trinary_operator.c index bce8bc4a..36e455cb 100644 --- a/tests/unictype/test-pr_ids_trinary_operator.c +++ b/tests/unictype/test-pr_ids_trinary_operator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_ids_unary_operator.c b/tests/unictype/test-pr_ids_unary_operator.c new file mode 100644 index 00000000..ec4b0e32 --- /dev/null +++ b/tests/unictype/test-pr_ids_unary_operator.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include "test-predicate-part1.h" + + { 0x2FFE, 0x2FFF } + +#define PREDICATE(c) uc_is_property_ids_unary_operator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_ignorable_control.c b/tests/unictype/test-pr_ignorable_control.c index f37e657a..1903d5a5 100644 --- a/tests/unictype/test-pr_ignorable_control.c +++ b/tests/unictype/test-pr_ignorable_control.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_iso_control.c b/tests/unictype/test-pr_iso_control.c index 725e220a..c033d15c 100644 --- a/tests/unictype/test-pr_iso_control.c +++ b/tests/unictype/test-pr_iso_control.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_join_control.c b/tests/unictype/test-pr_join_control.c index 71e11fc3..299d3a80 100644 --- a/tests/unictype/test-pr_join_control.c +++ b/tests/unictype/test-pr_join_control.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_left_of_pair.c b/tests/unictype/test-pr_left_of_pair.c index b35a7248..162571ae 100644 --- a/tests/unictype/test-pr_left_of_pair.c +++ b/tests/unictype/test-pr_left_of_pair.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_line_separator.c b/tests/unictype/test-pr_line_separator.c index 80ebf303..76f9291c 100644 --- a/tests/unictype/test-pr_line_separator.c +++ b/tests/unictype/test-pr_line_separator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_logical_order_exception.c b/tests/unictype/test-pr_logical_order_exception.c index a24f4688..99a11123 100644 --- a/tests/unictype/test-pr_logical_order_exception.c +++ b/tests/unictype/test-pr_logical_order_exception.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_lowercase.c b/tests/unictype/test-pr_lowercase.c index 226f6371..ec16470f 100644 --- a/tests/unictype/test-pr_lowercase.c +++ b/tests/unictype/test-pr_lowercase.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_math.c b/tests/unictype/test-pr_math.c index fb6e4d56..98daf24f 100644 --- a/tests/unictype/test-pr_math.c +++ b/tests/unictype/test-pr_math.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_non_break.c b/tests/unictype/test-pr_non_break.c index 9dd2fccb..9b607060 100644 --- a/tests/unictype/test-pr_non_break.c +++ b/tests/unictype/test-pr_non_break.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_not_a_character.c b/tests/unictype/test-pr_not_a_character.c index 259416dd..477c1837 100644 --- a/tests/unictype/test-pr_not_a_character.c +++ b/tests/unictype/test-pr_not_a_character.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_numeric.c b/tests/unictype/test-pr_numeric.c index c86261cb..746abd28 100644 --- a/tests/unictype/test-pr_numeric.c +++ b/tests/unictype/test-pr_numeric.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_alphabetic.c b/tests/unictype/test-pr_other_alphabetic.c index cf0476e5..d0ff062f 100644 --- a/tests/unictype/test-pr_other_alphabetic.c +++ b/tests/unictype/test-pr_other_alphabetic.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_default_ignorable_code_point.c b/tests/unictype/test-pr_other_default_ignorable_code_point.c index b51db935..3fd52fbd 100644 --- a/tests/unictype/test-pr_other_default_ignorable_code_point.c +++ b/tests/unictype/test-pr_other_default_ignorable_code_point.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_grapheme_extend.c b/tests/unictype/test-pr_other_grapheme_extend.c index 50bc89c2..960fb927 100644 --- a/tests/unictype/test-pr_other_grapheme_extend.c +++ b/tests/unictype/test-pr_other_grapheme_extend.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_id_continue.c b/tests/unictype/test-pr_other_id_continue.c index ce4bcaeb..e1e2fdda 100644 --- a/tests/unictype/test-pr_other_id_continue.c +++ b/tests/unictype/test-pr_other_id_continue.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -20,7 +20,10 @@ { 0x00B7, 0x00B7 }, { 0x0387, 0x0387 }, { 0x1369, 0x1371 }, - { 0x19DA, 0x19DA } + { 0x19DA, 0x19DA }, + { 0x200C, 0x200D }, + { 0x30FB, 0x30FB }, + { 0xFF65, 0xFF65 } #define PREDICATE(c) uc_is_property_other_id_continue (c) #include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_id_start.c b/tests/unictype/test-pr_other_id_start.c index c9b8efc5..dfbceb84 100644 --- a/tests/unictype/test-pr_other_id_start.c +++ b/tests/unictype/test-pr_other_id_start.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_lowercase.c b/tests/unictype/test-pr_other_lowercase.c index 3d7ba197..09b0dae4 100644 --- a/tests/unictype/test-pr_other_lowercase.c +++ b/tests/unictype/test-pr_other_lowercase.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_math.c b/tests/unictype/test-pr_other_math.c index b0715985..61306135 100644 --- a/tests/unictype/test-pr_other_math.c +++ b/tests/unictype/test-pr_other_math.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_uppercase.c b/tests/unictype/test-pr_other_uppercase.c index 6f5063f3..5a4541c3 100644 --- a/tests/unictype/test-pr_other_uppercase.c +++ b/tests/unictype/test-pr_other_uppercase.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_paired_punctuation.c b/tests/unictype/test-pr_paired_punctuation.c index a2f6671f..27565faf 100644 --- a/tests/unictype/test-pr_paired_punctuation.c +++ b/tests/unictype/test-pr_paired_punctuation.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_paragraph_separator.c b/tests/unictype/test-pr_paragraph_separator.c index 7cc3de9e..77d00fbd 100644 --- a/tests/unictype/test-pr_paragraph_separator.c +++ b/tests/unictype/test-pr_paragraph_separator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_pattern_syntax.c b/tests/unictype/test-pr_pattern_syntax.c index d265854b..ccc38488 100644 --- a/tests/unictype/test-pr_pattern_syntax.c +++ b/tests/unictype/test-pr_pattern_syntax.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_pattern_white_space.c b/tests/unictype/test-pr_pattern_white_space.c index b95978dd..e45e9ca9 100644 --- a/tests/unictype/test-pr_pattern_white_space.c +++ b/tests/unictype/test-pr_pattern_white_space.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_prepended_concatenation_mark.c b/tests/unictype/test-pr_prepended_concatenation_mark.c new file mode 100644 index 00000000..5a86b2c5 --- /dev/null +++ b/tests/unictype/test-pr_prepended_concatenation_mark.c @@ -0,0 +1,29 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007-2024 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include "test-predicate-part1.h" + + { 0x0600, 0x0605 }, + { 0x06DD, 0x06DD }, + { 0x070F, 0x070F }, + { 0x0890, 0x0891 }, + { 0x08E2, 0x08E2 }, + { 0x110BD, 0x110BD }, + { 0x110CD, 0x110CD } + +#define PREDICATE(c) uc_is_property_prepended_concatenation_mark (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_private_use.c b/tests/unictype/test-pr_private_use.c index c5c96c0e..167dd4e0 100644 --- a/tests/unictype/test-pr_private_use.c +++ b/tests/unictype/test-pr_private_use.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_punctuation.c b/tests/unictype/test-pr_punctuation.c index 3d0d45bf..29748f58 100644 --- a/tests/unictype/test-pr_punctuation.c +++ b/tests/unictype/test-pr_punctuation.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_quotation_mark.c b/tests/unictype/test-pr_quotation_mark.c index b0fc20ff..4db6b6f6 100644 --- a/tests/unictype/test-pr_quotation_mark.c +++ b/tests/unictype/test-pr_quotation_mark.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_radical.c b/tests/unictype/test-pr_radical.c index d732588a..c9a2bdd5 100644 --- a/tests/unictype/test-pr_radical.c +++ b/tests/unictype/test-pr_radical.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_regional_indicator.c b/tests/unictype/test-pr_regional_indicator.c index 2f912578..ecee1925 100644 --- a/tests/unictype/test-pr_regional_indicator.c +++ b/tests/unictype/test-pr_regional_indicator.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_sentence_terminal.c b/tests/unictype/test-pr_sentence_terminal.c index e2d1d3fd..100b7650 100644 --- a/tests/unictype/test-pr_sentence_terminal.c +++ b/tests/unictype/test-pr_sentence_terminal.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -34,6 +34,7 @@ { 0x1367, 0x1368 }, { 0x166E, 0x166E }, { 0x1735, 0x1736 }, + { 0x17D4, 0x17D5 }, { 0x1803, 0x1803 }, { 0x1809, 0x1809 }, { 0x1944, 0x1945 }, diff --git a/tests/unictype/test-pr_soft_dotted.c b/tests/unictype/test-pr_soft_dotted.c index a4b9212c..6a3677da 100644 --- a/tests/unictype/test-pr_soft_dotted.c +++ b/tests/unictype/test-pr_soft_dotted.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_space.c b/tests/unictype/test-pr_space.c index 6530990b..a1795c4e 100644 --- a/tests/unictype/test-pr_space.c +++ b/tests/unictype/test-pr_space.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_terminal_punctuation.c b/tests/unictype/test-pr_terminal_punctuation.c index 65ccbc8e..b41adece 100644 --- a/tests/unictype/test-pr_terminal_punctuation.c +++ b/tests/unictype/test-pr_terminal_punctuation.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_test.c b/tests/unictype/test-pr_test.c index c08c32c8..e479123c 100644 --- a/tests/unictype/test-pr_test.c +++ b/tests/unictype/test-pr_test.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-pr_titlecase.c b/tests/unictype/test-pr_titlecase.c index e9e26b22..779bd919 100644 --- a/tests/unictype/test-pr_titlecase.c +++ b/tests/unictype/test-pr_titlecase.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_unassigned_code_value.c b/tests/unictype/test-pr_unassigned_code_value.c index 607e938d..be826822 100644 --- a/tests/unictype/test-pr_unassigned_code_value.c +++ b/tests/unictype/test-pr_unassigned_code_value.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -286,13 +286,12 @@ { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, - { 0x2FFC, 0x2FFF }, { 0x3040, 0x3040 }, { 0x3097, 0x3098 }, { 0x3100, 0x3104 }, { 0x3130, 0x3130 }, { 0x318F, 0x318F }, - { 0x31E4, 0x31EF }, + { 0x31E4, 0x31EE }, { 0x321F, 0x321F }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, @@ -713,7 +712,8 @@ { 0x2B73A, 0x2B73F }, { 0x2B81E, 0x2B81F }, { 0x2CEA2, 0x2CEAF }, - { 0x2EBE1, 0x2F7FF }, + { 0x2EBE1, 0x2EBEF }, + { 0x2EE5E, 0x2F7FF }, { 0x2FA1E, 0x2FFFD }, { 0x3134B, 0x3134F }, { 0x323B0, 0x3FFFD }, diff --git a/tests/unictype/test-pr_unified_ideograph.c b/tests/unictype/test-pr_unified_ideograph.c index 234014a7..9ecdb7fb 100644 --- a/tests/unictype/test-pr_unified_ideograph.c +++ b/tests/unictype/test-pr_unified_ideograph.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -31,6 +31,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_uppercase.c b/tests/unictype/test-pr_uppercase.c index 03a6b490..826eb210 100644 --- a/tests/unictype/test-pr_uppercase.c +++ b/tests/unictype/test-pr_uppercase.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_variation_selector.c b/tests/unictype/test-pr_variation_selector.c index 98f81fef..0a2e37e5 100644 --- a/tests/unictype/test-pr_variation_selector.c +++ b/tests/unictype/test-pr_variation_selector.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_white_space.c b/tests/unictype/test-pr_white_space.c index 91367da2..c39d3def 100644 --- a/tests/unictype/test-pr_white_space.c +++ b/tests/unictype/test-pr_white_space.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_xid_continue.c b/tests/unictype/test-pr_xid_continue.c index 34d4708b..91371e8f 100644 --- a/tests/unictype/test-pr_xid_continue.c +++ b/tests/unictype/test-pr_xid_continue.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -317,6 +317,7 @@ { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, + { 0x200C, 0x200D }, { 0x203F, 0x2040 }, { 0x2054, 0x2054 }, { 0x2071, 0x2071 }, @@ -362,8 +363,7 @@ { 0x3041, 0x3096 }, { 0x3099, 0x309A }, { 0x309D, 0x309F }, - { 0x30A1, 0x30FA }, - { 0x30FC, 0x30FF }, + { 0x30A1, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x31A0, 0x31BF }, @@ -447,7 +447,7 @@ { 0xFF21, 0xFF3A }, { 0xFF3F, 0xFF3F }, { 0xFF41, 0xFF5A }, - { 0xFF66, 0xFFBE }, + { 0xFF65, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, @@ -788,6 +788,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF }, diff --git a/tests/unictype/test-pr_xid_start.c b/tests/unictype/test-pr_xid_start.c index 0e4f7d31..09ce3db1 100644 --- a/tests/unictype/test-pr_xid_start.c +++ b/tests/unictype/test-pr_xid_start.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -680,6 +680,7 @@ { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, + { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_zero_width.c b/tests/unictype/test-pr_zero_width.c index a8eef5ec..6767de44 100644 --- a/tests/unictype/test-pr_zero_width.c +++ b/tests/unictype/test-pr_zero_width.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-predicate-part1.h b/tests/unictype/test-predicate-part1.h index 76de3a78..10eb668b 100644 --- a/tests/unictype/test-predicate-part1.h +++ b/tests/unictype/test-predicate-part1.h @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-predicate-part2.h b/tests/unictype/test-predicate-part2.h index d42921ab..aecd5f5a 100644 --- a/tests/unictype/test-predicate-part2.h +++ b/tests/unictype/test-predicate-part2.h @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-scripts.c b/tests/unictype/test-scripts.c index 059006e1..6f51b631 100644 --- a/tests/unictype/test-scripts.c +++ b/tests/unictype/test-scripts.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-sy_c_ident.c b/tests/unictype/test-sy_c_ident.c index baf8b106..87022732 100644 --- a/tests/unictype/test-sy_c_ident.c +++ b/tests/unictype/test-sy_c_ident.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-sy_c_whitespace.c b/tests/unictype/test-sy_c_whitespace.c index 1d047752..88daee7a 100644 --- a/tests/unictype/test-sy_c_whitespace.c +++ b/tests/unictype/test-sy_c_whitespace.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-sy_java_ident.c b/tests/unictype/test-sy_java_ident.c index 206d3940..d3075b17 100644 --- a/tests/unictype/test-sy_java_ident.c +++ b/tests/unictype/test-sy_java_ident.c @@ -1,5 +1,5 @@ /* Test the Unicode character type functions. - Copyright (C) 2007-2009 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-sy_java_whitespace.c b/tests/unictype/test-sy_java_whitespace.c index 4ce5982a..8c974f07 100644 --- a/tests/unictype/test-sy_java_whitespace.c +++ b/tests/unictype/test-sy_java_whitespace.c @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unigbrk/GraphemeBreakTest.txt b/tests/unigbrk/GraphemeBreakTest.txt index 3c73f97b..d9c7b066 100644 --- a/tests/unigbrk/GraphemeBreakTest.txt +++ b/tests/unigbrk/GraphemeBreakTest.txt @@ -1,6 +1,46 @@ -# GraphemeBreakTest-15.0.0.txt -# Date: 2022-02-26, 00:38:37 GMT -# © 2022 Unicode®, Inc. +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. + +# GraphemeBreakTest-15.1.0.txt +# Date: 2023-08-07, 15:52:55 GMT +# © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # @@ -36,8 +76,8 @@ ÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0020 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 0020 × 0308 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0020 × 0A03 ÷ # ÷ [0.2] SPACE (Other) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0020 × 0308 × 0A03 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 0020 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0020 × 0308 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0020 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -48,10 +88,24 @@ ÷ 0020 × 0308 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0020 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0020 × 0308 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0020 × 0900 ÷ # ÷ [0.2] SPACE (Other) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0308 × 0900 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 ÷ 0904 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0308 ÷ 0904 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 ÷ 0D4E ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0308 ÷ 0D4E ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 ÷ 0915 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0020 × 0308 ÷ 0915 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 0020 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 0020 × 0308 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0020 × 093C ÷ # ÷ [0.2] SPACE (Other) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0020 × 0308 × 093C ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0020 × 094D ÷ # ÷ [0.2] SPACE (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0020 × 0308 × 094D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0020 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -70,8 +124,8 @@ ÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000D ÷ 0600 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000D ÷ 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 0A03 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 0308 × 0A03 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 000D ÷ 1100 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 000D ÷ 1160 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -82,10 +136,24 @@ ÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 000D ÷ AC01 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 000D ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000D ÷ 0900 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0308 × 0900 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0904 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0904 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0D4E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0D4E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0915 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0915 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 000D ÷ 231A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 231A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 000D ÷ 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 093C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0308 × 093C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 094D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0308 × 094D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 000D ÷ 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 000D ÷ 0378 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] @@ -104,8 +172,8 @@ ÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000A ÷ 0600 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000A ÷ 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 0A03 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 0308 × 0A03 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 000A ÷ 1100 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 000A ÷ 1160 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -116,10 +184,24 @@ ÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 000A ÷ AC01 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 000A ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000A ÷ 0900 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0308 × 0900 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0904 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0904 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0D4E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0D4E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0915 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0915 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 000A ÷ 231A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 231A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 000A ÷ 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 093C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0308 × 093C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 094D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0308 × 094D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 000A ÷ 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 000A ÷ 0378 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] @@ -138,8 +220,8 @@ ÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0001 ÷ 0600 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0001 ÷ 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 0A03 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 0308 × 0A03 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 0001 ÷ 1100 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0001 ÷ 1160 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -150,10 +232,24 @@ ÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0001 ÷ AC01 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0001 ÷ 0900 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0308 × 0900 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0904 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0904 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0D4E ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0D4E ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0915 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0915 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 0001 ÷ 231A ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 231A ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 0001 ÷ 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 093C ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0308 × 093C ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 094D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0308 × 094D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 0001 ÷ 200D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0001 ÷ 0308 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0001 ÷ 0378 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] @@ -172,8 +268,8 @@ ÷ 034F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 034F ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 034F × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 034F × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 034F × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 034F × 0A03 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 034F × 0308 × 0A03 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 034F ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 034F × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 034F ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -184,10 +280,24 @@ ÷ 034F × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 034F ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 034F × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 034F × 0900 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0308 × 0900 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F ÷ 0904 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0308 ÷ 0904 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 034F ÷ 0D4E ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0308 ÷ 0D4E ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F ÷ 0915 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 034F × 0308 ÷ 0915 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 034F ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 034F × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 034F × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 034F × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 034F × 093C ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 034F × 0308 × 093C ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 034F × 094D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 034F × 0308 × 094D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 034F × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 034F × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 034F ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -206,8 +316,8 @@ ÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F1E6 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1F1E6 × 0A03 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1F1E6 × 0308 × 0A03 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 1F1E6 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1F1E6 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -218,10 +328,24 @@ ÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1F1E6 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1F1E6 × 0900 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0308 × 0900 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 ÷ 0904 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0904 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 ÷ 0D4E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0D4E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 ÷ 0915 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0915 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 1F1E6 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 093C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 0308 × 093C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 094D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 0308 × 094D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -240,8 +364,8 @@ ÷ 0600 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0600 × 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 0600 × 0308 ÷ 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0600 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0600 × 0308 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0600 × 0A03 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0600 × 0308 × 0A03 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 0600 × 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0600 × 0308 ÷ 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0600 × 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -252,48 +376,76 @@ ÷ 0600 × 0308 ÷ AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0600 × AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0600 × 0308 ÷ AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0600 × 0900 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0308 × 0900 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0308 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0904 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0308 ÷ 0904 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0D4E ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0308 ÷ 0D4E ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0915 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0600 × 0308 ÷ 0915 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 0600 × 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] WATCH (ExtPict) ÷ [0.3] ÷ 0600 × 0308 ÷ 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 0600 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 0600 × 0308 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0600 × 093C ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0308 × 093C ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0600 × 094D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0308 × 094D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 0600 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0600 × 0308 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0600 × 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] <reserved-0378> (Other) ÷ [0.3] ÷ 0600 × 0308 ÷ 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] -÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] -÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] -÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] -÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] -÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] -÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] -÷ 0903 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0903 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0903 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0903 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0903 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0903 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0903 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0903 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0903 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0903 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0903 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0903 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] -÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0A03 ÷ 0020 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0020 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0A03 ÷ 000D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0A03 × 0308 ÷ 000D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0A03 ÷ 000A ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0A03 × 0308 ÷ 000A ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0A03 ÷ 0001 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0001 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0A03 × 034F ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0A03 × 0308 × 034F ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0A03 ÷ 1F1E6 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0A03 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0A03 ÷ 0600 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0600 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0A03 × 0A03 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0A03 × 0308 × 0A03 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0A03 ÷ 1100 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0A03 × 0308 ÷ 1100 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0A03 ÷ 1160 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0A03 × 0308 ÷ 1160 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0A03 ÷ 11A8 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0A03 × 0308 ÷ 11A8 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0A03 ÷ AC00 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0A03 × 0308 ÷ AC00 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0A03 ÷ AC01 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0A03 × 0308 ÷ AC01 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0A03 × 0900 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0308 × 0900 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0903 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0308 × 0903 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 ÷ 0904 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0904 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 ÷ 0D4E ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0D4E ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 ÷ 0915 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0915 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0A03 ÷ 231A ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0A03 × 0308 ÷ 231A ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0A03 × 0300 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 0308 × 0300 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 093C ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 0308 × 093C ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 094D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 0308 × 094D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 200D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 0308 × 200D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0A03 ÷ 0378 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0378 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1100 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1100 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1100 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] @@ -308,8 +460,8 @@ ÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1100 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 1100 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1100 × 0A03 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1100 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1100 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1100 × 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -320,10 +472,24 @@ ÷ 1100 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1100 × AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1100 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1100 × 0900 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 ÷ 0904 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 ÷ 0D4E ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 ÷ 0915 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 1100 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 1100 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 1100 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 1100 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 1100 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1100 × 093C ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1100 × 0308 × 093C ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1100 × 094D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 1100 × 0308 × 094D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 1100 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 1100 × 0308 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 1100 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -342,8 +508,8 @@ ÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1160 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 1160 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1160 × 0A03 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1160 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 1160 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1160 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1160 × 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -354,10 +520,24 @@ ÷ 1160 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1160 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1160 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1160 × 0900 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 ÷ 0904 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 ÷ 0D4E ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 ÷ 0915 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 1160 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 1160 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 1160 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 1160 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 1160 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1160 × 093C ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1160 × 0308 × 093C ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1160 × 094D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 1160 × 0308 × 094D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 1160 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 1160 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 1160 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -376,8 +556,8 @@ ÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 11A8 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 11A8 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 11A8 × 0A03 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 11A8 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 11A8 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 11A8 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -388,10 +568,24 @@ ÷ 11A8 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 11A8 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 11A8 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 11A8 × 0900 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 ÷ 0904 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 ÷ 0D4E ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 ÷ 0915 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 11A8 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 11A8 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 11A8 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 11A8 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 093C ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 0308 × 093C ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 094D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 0308 × 094D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 11A8 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 11A8 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 11A8 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -410,8 +604,8 @@ ÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ AC00 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ AC00 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC00 × 0A03 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC00 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ AC00 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ AC00 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ AC00 × 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -422,10 +616,24 @@ ÷ AC00 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ AC00 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ AC00 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC00 × 0900 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 ÷ 0904 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 ÷ 0D4E ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 ÷ 0915 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ AC00 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ AC00 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ AC00 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ AC00 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ AC00 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC00 × 093C ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ AC00 × 0308 × 093C ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ AC00 × 094D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ AC00 × 0308 × 094D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ AC00 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ AC00 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ AC00 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -444,8 +652,8 @@ ÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ AC01 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ AC01 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC01 × 0A03 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC01 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ AC01 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ AC01 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ AC01 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -456,14 +664,268 @@ ÷ AC01 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ AC01 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ AC01 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC01 × 0900 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 ÷ 0904 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 ÷ 0D4E ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 ÷ 0915 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ AC01 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ AC01 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ AC01 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ AC01 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ AC01 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC01 × 093C ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ AC01 × 0308 × 093C ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ AC01 × 094D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ AC01 × 0308 × 094D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ AC01 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ AC01 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ AC01 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ AC01 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0900 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0900 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0900 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0900 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0900 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0900 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0900 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0900 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0900 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0900 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0900 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0900 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0900 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0900 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0900 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0900 × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0900 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0900 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0900 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0900 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0900 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0900 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0900 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0900 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0900 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0900 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0900 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0900 × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0900 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0900 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0900 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0900 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0900 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0900 × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0900 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0900 × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0900 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0900 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0900 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0900 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0903 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0903 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0903 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0903 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0903 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0903 × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0903 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0903 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0903 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0903 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0903 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0903 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0903 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0903 × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0903 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0903 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0903 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0903 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0904 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0904 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0904 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0904 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0904 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0904 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0904 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0904 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0904 × 034F ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0904 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0904 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0904 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0904 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0904 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0904 × 0A03 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0904 × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0904 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0904 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0904 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0904 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0904 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0904 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0904 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0904 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0904 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0904 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0904 × 0900 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0903 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0904 × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0904 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0904 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0904 × 0300 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0904 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0904 × 093C ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0904 × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0904 × 094D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0904 × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0904 × 200D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0904 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0904 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0904 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0D4E × 0020 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] SPACE (Other) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0020 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0D4E ÷ 000D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0D4E × 0308 ÷ 000D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0D4E ÷ 000A ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0D4E × 0308 ÷ 000A ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0D4E ÷ 0001 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0001 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0D4E × 034F ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0D4E × 0308 × 034F ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0D4E × 1F1E6 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0D4E × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0D4E × 0600 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0600 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0D4E × 0A03 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0D4E × 0308 × 0A03 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0D4E × 1100 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0D4E × 0308 ÷ 1100 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0D4E × 1160 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0D4E × 0308 ÷ 1160 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0D4E × 11A8 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0D4E × 0308 ÷ 11A8 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0D4E × AC00 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0D4E × 0308 ÷ AC00 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0D4E × AC01 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0D4E × 0308 ÷ AC01 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0D4E × 0900 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0308 × 0900 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0903 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0308 × 0903 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0904 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0904 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0D4E ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0D4E ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0915 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0915 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0D4E × 231A ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] WATCH (ExtPict) ÷ [0.3] +÷ 0D4E × 0308 ÷ 231A ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0D4E × 0300 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0308 × 0300 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 093C ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0308 × 093C ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 094D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0308 × 094D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 200D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0308 × 200D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0378 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] <reserved-0378> (Other) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0378 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0915 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0915 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0915 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0915 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0915 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0915 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0915 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0915 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0915 × 034F ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0915 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0915 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0915 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0915 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0915 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0915 × 0A03 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0915 × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0915 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0915 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0915 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0915 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0915 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0915 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0915 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0915 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0915 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0915 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0915 × 0900 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0903 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0915 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0915 × 0300 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0915 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0915 × 093C ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0915 × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0915 × 094D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0915 × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0915 × 200D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0915 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0915 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0915 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 231A ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 231A × 0308 ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 231A ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] @@ -478,8 +940,8 @@ ÷ 231A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 231A ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 231A × 0308 ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 231A × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 231A × 0308 × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 231A × 0A03 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 231A × 0308 × 0A03 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 231A ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 231A × 0308 ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 231A ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -490,10 +952,24 @@ ÷ 231A × 0308 ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 231A ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 231A × 0308 ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 231A × 0900 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0308 × 0900 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0308 × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A ÷ 0904 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0308 ÷ 0904 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 231A ÷ 0D4E ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0308 ÷ 0D4E ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A ÷ 0915 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 231A × 0308 ÷ 0915 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 231A ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 231A × 0308 ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 231A × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 231A × 0308 × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 231A × 093C ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 231A × 0308 × 093C ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 231A × 094D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 231A × 0308 × 094D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 231A × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 231A × 0308 × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 231A ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -512,8 +988,8 @@ ÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0300 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 0300 × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0300 × 0A03 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0300 × 0308 × 0A03 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 0300 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0300 × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0300 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -524,14 +1000,124 @@ ÷ 0300 × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0300 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0300 × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0300 × 0900 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0308 × 0900 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 ÷ 0904 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0308 ÷ 0904 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 ÷ 0D4E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0308 ÷ 0D4E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 ÷ 0915 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0300 × 0308 ÷ 0915 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 0300 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 0300 × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0300 × 093C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0300 × 0308 × 093C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0300 × 094D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0300 × 0308 × 094D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0300 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 093C ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 093C × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 093C ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 093C × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 093C ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 093C × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 093C ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 093C × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 093C × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 093C × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 093C ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 093C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 093C ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 093C × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 093C × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 093C × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 093C ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 093C × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 093C ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 093C × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 093C ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 093C × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 093C ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 093C × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 093C ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 093C × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 093C × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 093C ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 093C × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 093C ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 093C × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 093C × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 093C × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 093C × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 093C × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 093C × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 093C × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 093C × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 093C × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 093C ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 093C × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 094D ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 094D × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 094D ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 094D × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 094D ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 094D × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 094D ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 094D × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 094D × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 094D × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 094D ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 094D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 094D ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 094D × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 094D × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 094D × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 094D ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 094D × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 094D ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 094D × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 094D ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 094D × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 094D ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 094D × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 094D ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 094D × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 094D × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 094D ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 094D × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 094D ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 094D × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 094D × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 094D × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 094D × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 094D × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 094D × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 094D × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 094D × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 094D × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 094D ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 094D × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] @@ -546,8 +1132,8 @@ ÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 200D ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 200D × 0308 ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 200D × 0A03 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 200D × 0308 × 0A03 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 200D ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 200D × 0308 ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 200D ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -558,10 +1144,24 @@ ÷ 200D × 0308 ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 200D ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 200D × 0308 ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 200D × 0900 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0308 × 0900 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D ÷ 0904 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0308 ÷ 0904 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 200D ÷ 0D4E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0308 ÷ 0D4E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D ÷ 0915 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 200D × 0308 ÷ 0915 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 200D ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 200D × 0308 ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 200D × 093C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 200D × 0308 × 093C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 200D × 094D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 200D × 0308 × 094D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 200D ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -580,8 +1180,8 @@ ÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0378 ÷ 0600 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 0378 × 0308 ÷ 0600 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0378 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 × 0A03 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 × 0308 × 0A03 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 0378 ÷ 1100 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0378 × 0308 ÷ 1100 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0378 ÷ 1160 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -592,10 +1192,24 @@ ÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0378 ÷ AC01 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0378 × 0308 ÷ AC01 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0378 × 0900 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0308 × 0900 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 ÷ 0904 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0308 ÷ 0904 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 ÷ 0D4E ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0308 ÷ 0D4E ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 ÷ 0915 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0378 × 0308 ÷ 0915 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] ÷ 0378 ÷ 231A ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 0378 × 0308 ÷ 231A ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] ÷ 0378 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] ÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0378 × 093C ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0378 × 0308 × 093C ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0378 × 094D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0378 × 0308 × 094D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] ÷ 0378 × 200D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0378 × 0308 × 200D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0378 ÷ 0378 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -614,7 +1228,7 @@ ÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] ÷ 0061 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] ÷ 0061 × 0308 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] ÷ 0061 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3] ÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] ÷ 0061 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] @@ -624,7 +1238,18 @@ ÷ 0061 × 200D ÷ 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] ÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] ÷ 0061 × 200D ÷ 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] +÷ 0915 ÷ 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 200D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 093C × 200D × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 093C × 094D × 200D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 0924 × 094D × 092F ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER YA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D ÷ 0061 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER A (Other) ÷ [0.3] +÷ 0061 × 094D ÷ 0924 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 003F × 094D ÷ 0924 ÷ # ÷ [0.2] QUESTION MARK (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] # -# Lines: 602 +# Lines: 1187 # # EOF diff --git a/tests/unigbrk/test-u16-grapheme-breaks.c b/tests/unigbrk/test-u16-grapheme-breaks.c index a1cb80da..79360508 100644 --- a/tests/unigbrk/test-u16-grapheme-breaks.c +++ b/tests/unigbrk/test-u16-grapheme-breaks.c @@ -1,5 +1,5 @@ /* Grapheme cluster breaks test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -61,19 +61,20 @@ test_u16_grapheme_breaks (const char *expected, ...) fprintf (stderr, " input:"); for (j = 0; j < n; j++) - fprintf (stderr, " %02x", s[j]); + fprintf (stderr, " %04X", s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); for (j = 0; j < n; j++) - fprintf (stderr, " %d", expected[j] == '#'); + fprintf (stderr, " %d", expected[j] == '#'); putc ('\n', stderr); fprintf (stderr, " actual:"); for (j = 0; j < n; j++) - fprintf (stderr, " %d", breaks[j]); + fprintf (stderr, " %d", breaks[j]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unigbrk/test-u16-grapheme-next.c b/tests/unigbrk/test-u16-grapheme-next.c index bb7aba65..45a7ac0a 100644 --- a/tests/unigbrk/test-u16-grapheme-next.c +++ b/tests/unigbrk/test-u16-grapheme-next.c @@ -1,5 +1,5 @@ /* Next grapheme cluster length test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -57,11 +57,12 @@ test_u16_grapheme_next (size_t len, ...) if (next == NULL) fputs ("u16_grapheme_next returned NULL", stderr); else - fprintf (stderr, "u16_grapheme_next skipped %zu units", next - s); + fprintf (stderr, "u16_grapheme_next skipped %tu units", next - s); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %04x", s[i]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unigbrk/test-u16-grapheme-prev.c b/tests/unigbrk/test-u16-grapheme-prev.c index 986b5ddf..8ba01c2e 100644 --- a/tests/unigbrk/test-u16-grapheme-prev.c +++ b/tests/unigbrk/test-u16-grapheme-prev.c @@ -1,5 +1,5 @@ /* Previous grapheme cluster test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -59,11 +59,12 @@ test_u16_grapheme_prev (size_t len, ...) if (prev == NULL) fputs ("u16_grapheme_prev returned NULL", stderr); else - fprintf (stderr, "u16_grapheme_prev skipped %zu units", end - prev); + fprintf (stderr, "u16_grapheme_prev skipped %tu units", end - prev); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %04x", s[i]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unigbrk/test-u32-grapheme-breaks.c b/tests/unigbrk/test-u32-grapheme-breaks.c index 7af266e8..996555cc 100644 --- a/tests/unigbrk/test-u32-grapheme-breaks.c +++ b/tests/unigbrk/test-u32-grapheme-breaks.c @@ -1,5 +1,5 @@ /* Grapheme cluster breaks test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -61,19 +61,20 @@ test_u32_grapheme_breaks (const char *expected, ...) fprintf (stderr, " input:"); for (j = 0; j < n; j++) - fprintf (stderr, " %02x", s[j]); + fprintf (stderr, " %04X", s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); for (j = 0; j < n; j++) - fprintf (stderr, " %d", expected[j] == '#'); + fprintf (stderr, " %d", expected[j] == '#'); putc ('\n', stderr); fprintf (stderr, " actual:"); for (j = 0; j < n; j++) - fprintf (stderr, " %d", breaks[j]); + fprintf (stderr, " %d", breaks[j]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unigbrk/test-u32-grapheme-next.c b/tests/unigbrk/test-u32-grapheme-next.c index 1762378c..2681d674 100644 --- a/tests/unigbrk/test-u32-grapheme-next.c +++ b/tests/unigbrk/test-u32-grapheme-next.c @@ -1,5 +1,5 @@ /* Next grapheme cluster length test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -57,11 +57,12 @@ test_u32_grapheme_next (size_t len, ...) if (next == NULL) fputs ("u32_grapheme_next returned NULL", stderr); else - fprintf (stderr, "u32_grapheme_next skipped %zu units", next - s); + fprintf (stderr, "u32_grapheme_next skipped %tu units", next - s); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %04x", s[i]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unigbrk/test-u32-grapheme-prev.c b/tests/unigbrk/test-u32-grapheme-prev.c index d3838f52..2c8006ae 100644 --- a/tests/unigbrk/test-u32-grapheme-prev.c +++ b/tests/unigbrk/test-u32-grapheme-prev.c @@ -1,5 +1,5 @@ /* Previous grapheme cluster test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -59,11 +59,12 @@ test_u32_grapheme_prev (size_t len, ...) if (prev == NULL) fputs ("u32_grapheme_prev returned NULL", stderr); else - fprintf (stderr, "u32_grapheme_prev skipped %zu units", end - prev); + fprintf (stderr, "u32_grapheme_prev skipped %tu units", end - prev); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %04x", s[i]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unigbrk/test-u8-grapheme-breaks.c b/tests/unigbrk/test-u8-grapheme-breaks.c index fdc0d505..1ccdd601 100644 --- a/tests/unigbrk/test-u8-grapheme-breaks.c +++ b/tests/unigbrk/test-u8-grapheme-breaks.c @@ -1,5 +1,5 @@ /* Grapheme cluster breaks test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -50,7 +50,7 @@ test_u8_grapheme_breaks (const char *input, const char *expected) fprintf (stderr, " input:"); for (j = 0; j < n; j++) - fprintf (stderr, " %02x", s[j]); + fprintf (stderr, " %02X", s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); @@ -63,6 +63,7 @@ test_u8_grapheme_breaks (const char *input, const char *expected) fprintf (stderr, " %d", breaks[j]); putc ('\n', stderr); + fflush (stderr); abort (); } diff --git a/tests/unigbrk/test-u8-grapheme-next.c b/tests/unigbrk/test-u8-grapheme-next.c index 5c61d847..10dea9d0 100644 --- a/tests/unigbrk/test-u8-grapheme-next.c +++ b/tests/unigbrk/test-u8-grapheme-next.c @@ -1,5 +1,5 @@ /* Next grapheme cluster length test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -38,11 +38,12 @@ test_u8_grapheme_next (const char *input, size_t n, size_t len) if (next == NULL) fputs ("u8_grapheme_next returned NULL", stderr); else - fprintf (stderr, "u8_grapheme_next skipped %zu bytes", next - s); + fprintf (stderr, "u8_grapheme_next skipped %tu bytes", next - s); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %02x", s[i]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unigbrk/test-u8-grapheme-prev.c b/tests/unigbrk/test-u8-grapheme-prev.c index a59e264d..e3642367 100644 --- a/tests/unigbrk/test-u8-grapheme-prev.c +++ b/tests/unigbrk/test-u8-grapheme-prev.c @@ -1,5 +1,5 @@ /* Previous grapheme cluster test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -39,11 +39,12 @@ test_u8_grapheme_prev (const char *input, size_t n, size_t len) if (prev == NULL) fputs ("u8_grapheme_prev returned NULL", stderr); else - fprintf (stderr, "u8_grapheme_prev skipped %zu bytes", end - prev); + fprintf (stderr, "u8_grapheme_prev skipped %tu bytes", end - prev); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %02x", s[i]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unigbrk/test-uc-gbrk-prop.c b/tests/unigbrk/test-uc-gbrk-prop.c index 605d83dc..65b91d24 100644 --- a/tests/unigbrk/test-uc-gbrk-prop.c +++ b/tests/unigbrk/test-uc-gbrk-prop.c @@ -1,5 +1,5 @@ /* Test the Unicode grapheme break property function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unigbrk/test-uc-gbrk-prop.h b/tests/unigbrk/test-uc-gbrk-prop.h index d975a1e4..3949a191 100644 --- a/tests/unigbrk/test-uc-gbrk-prop.h +++ b/tests/unigbrk/test-uc-gbrk-prop.h @@ -1,6 +1,6 @@ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode grapheme break property functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/tests/unigbrk/test-uc-grapheme-breaks.c b/tests/unigbrk/test-uc-grapheme-breaks.c index 1e3b1ee8..afaab06b 100644 --- a/tests/unigbrk/test-uc-grapheme-breaks.c +++ b/tests/unigbrk/test-uc-grapheme-breaks.c @@ -1,5 +1,5 @@ /* Grapheme cluster break function test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -27,7 +27,7 @@ #include "macros.h" -static const char * +_GL_UNUSED static const char * graphemebreakproperty_to_string (int gbp) { printf ("%d\n", gbp); @@ -75,19 +75,20 @@ test_uc_grapheme_breaks (const char *expected, ucs4_t *s, size_t n, fprintf (stderr, " input:"); for (j = 0; j < n; j++) - fprintf (stderr, " %02x", s[j]); + fprintf (stderr, " %04X", s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); for (j = 0; j < n; j++) - fprintf (stderr, " %d", expected[j] == '#'); + fprintf (stderr, " %d", expected[j] == '#'); putc ('\n', stderr); fprintf (stderr, " actual:"); for (j = 0; j < n; j++) - fprintf (stderr, " %d", breaks[j]); + fprintf (stderr, " %d", breaks[j]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unigbrk/test-uc-is-grapheme-break.c b/tests/unigbrk/test-uc-is-grapheme-break.c index 433ba686..92674a07 100644 --- a/tests/unigbrk/test-uc-is-grapheme-break.c +++ b/tests/unigbrk/test-uc-is-grapheme-break.c @@ -1,5 +1,5 @@ /* Grapheme cluster break function test. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -30,7 +30,6 @@ const char * graphemebreakproperty_to_string (int gbp) { - printf ("%d\n", gbp); switch (gbp) { #define CASE(VALUE) case GBP_##VALUE: return #VALUE; @@ -89,6 +88,9 @@ main (int argc, char *argv[]) const char *p; ucs4_t prev; int last_char_prop; + bool incb_consonant_extended; + bool incb_consonant_extended_linker; + bool incb_consonant_extended_linker_extended; bool emoji_modifier_sequence; bool emoji_modifier_sequence_before_last_char; size_t ri_count; @@ -102,6 +104,9 @@ main (int argc, char *argv[]) continue; last_char_prop = -1; + incb_consonant_extended = false; + incb_consonant_extended_linker = false; + incb_consonant_extended_linker_extended = false; emoji_modifier_sequence = false; emoji_modifier_sequence_before_last_char = false; ri_count = 0; @@ -150,10 +155,17 @@ main (int argc, char *argv[]) next = next_int; } + int incb = uc_indic_conjunct_break (next); + /* Skip unsupported rules involving 3 or more characters. */ - if (last_char_prop == GBP_ZWJ - && emoji_modifier_sequence_before_last_char - && uc_is_property_extended_pictographic (next)) + if (incb_consonant_extended_linker_extended + && incb == UC_INDIC_CONJUNCT_BREAK_CONSONANT) + fprintf (stderr, "%s:%d: skipping GB9c: should join U+%04X " + "and U+%04X\n", + filename, lineno, prev, next); + else if (last_char_prop == GBP_ZWJ + && emoji_modifier_sequence_before_last_char + && uc_is_property_extended_pictographic (next)) { int prev_gbp = uc_graphemeclusterbreak_property (prev); int next_gbp = uc_graphemeclusterbreak_property (next); @@ -190,6 +202,17 @@ main (int argc, char *argv[]) p += strspn (p, " \t\r\n"); prev = next; + incb_consonant_extended_linker = + incb_consonant_extended && incb == UC_INDIC_CONJUNCT_BREAK_LINKER; + incb_consonant_extended_linker_extended = + (incb_consonant_extended_linker + || (incb_consonant_extended_linker_extended + && incb >= UC_INDIC_CONJUNCT_BREAK_LINKER)); + incb_consonant_extended = + (incb == UC_INDIC_CONJUNCT_BREAK_CONSONANT + || (incb_consonant_extended + && incb >= UC_INDIC_CONJUNCT_BREAK_LINKER)); + emoji_modifier_sequence_before_last_char = emoji_modifier_sequence; emoji_modifier_sequence = (emoji_modifier_sequence diff --git a/tests/unigbrk/test-ulc-grapheme-breaks.c b/tests/unigbrk/test-ulc-grapheme-breaks.c index 8ef608fe..519be6fe 100644 --- a/tests/unigbrk/test-ulc-grapheme-breaks.c +++ b/tests/unigbrk/test-ulc-grapheme-breaks.c @@ -1,5 +1,5 @@ /* Grapheme cluster breaks test. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -64,7 +64,7 @@ main () fprintf (stderr, " input:"); for (j = 0; j < LENGTH; j++) - fprintf (stderr, " %02x", (unsigned char) s[j]); + fprintf (stderr, " %02X", (unsigned char) s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); @@ -77,6 +77,7 @@ main () fprintf (stderr, " %d", p[j]); putc ('\n', stderr); + fflush (stderr); abort (); } } diff --git a/tests/unilbrk/test-u16-possible-linebreaks.c b/tests/unilbrk/test-u16-possible-linebreaks.c index 0156d455..877367e7 100644 --- a/tests/unilbrk/test-u16-possible-linebreaks.c +++ b/tests/unilbrk/test-u16-possible-linebreaks.c @@ -1,5 +1,5 @@ /* Test of line breaking of UTF-16 strings. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -255,8 +255,10 @@ int main () { test_function (u16_possible_linebreaks, 2); -#undef u16_possible_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u16_possible_linebreaks test_function (u16_possible_linebreaks, 1); +#endif return 0; } diff --git a/tests/unilbrk/test-u16-width-linebreaks.c b/tests/unilbrk/test-u16-width-linebreaks.c index c9605447..fb337873 100644 --- a/tests/unilbrk/test-u16-width-linebreaks.c +++ b/tests/unilbrk/test-u16-width-linebreaks.c @@ -1,5 +1,5 @@ /* Test of line breaking of UTF-16 strings. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -76,8 +76,10 @@ int main () { test_function (u16_width_linebreaks, 2); -#undef u16_width_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u16_width_linebreaks test_function (u16_width_linebreaks, 1); +#endif return 0; } diff --git a/tests/unilbrk/test-u32-possible-linebreaks.c b/tests/unilbrk/test-u32-possible-linebreaks.c index 5c08c974..84b0e3c0 100644 --- a/tests/unilbrk/test-u32-possible-linebreaks.c +++ b/tests/unilbrk/test-u32-possible-linebreaks.c @@ -1,5 +1,5 @@ /* Test of line breaking of UTF-32 strings. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -255,8 +255,10 @@ int main () { test_function (u32_possible_linebreaks, 2); -#undef u32_possible_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u32_possible_linebreaks test_function (u32_possible_linebreaks, 1); +#endif return 0; } diff --git a/tests/unilbrk/test-u32-width-linebreaks.c b/tests/unilbrk/test-u32-width-linebreaks.c index fa9c09b6..b59405cd 100644 --- a/tests/unilbrk/test-u32-width-linebreaks.c +++ b/tests/unilbrk/test-u32-width-linebreaks.c @@ -1,5 +1,5 @@ /* Test of line breaking of UTF-32 strings. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -76,8 +76,10 @@ int main () { test_function (u32_width_linebreaks, 2); -#undef u32_width_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u32_width_linebreaks test_function (u32_width_linebreaks, 1); +#endif return 0; } diff --git a/tests/unilbrk/test-u8-possible-linebreaks.c b/tests/unilbrk/test-u8-possible-linebreaks.c index 37f27067..90768d20 100644 --- a/tests/unilbrk/test-u8-possible-linebreaks.c +++ b/tests/unilbrk/test-u8-possible-linebreaks.c @@ -1,5 +1,5 @@ /* Test of line breaking of UTF-8 strings. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -238,8 +238,10 @@ int main () { test_function (u8_possible_linebreaks, 2); -#undef u8_possible_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u8_possible_linebreaks test_function (u8_possible_linebreaks, 1); +#endif return 0; } diff --git a/tests/unilbrk/test-u8-width-linebreaks.c b/tests/unilbrk/test-u8-width-linebreaks.c index e9552350..a84ee0db 100644 --- a/tests/unilbrk/test-u8-width-linebreaks.c +++ b/tests/unilbrk/test-u8-width-linebreaks.c @@ -1,5 +1,5 @@ /* Test of line breaking of UTF-8 strings. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -70,8 +70,10 @@ int main () { test_function (u8_width_linebreaks, 2); -#undef u8_width_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u8_width_linebreaks test_function (u8_width_linebreaks, 1); +#endif return 0; } diff --git a/tests/unilbrk/test-ulc-possible-linebreaks.c b/tests/unilbrk/test-ulc-possible-linebreaks.c index e6859277..21ec0b5e 100644 --- a/tests/unilbrk/test-ulc-possible-linebreaks.c +++ b/tests/unilbrk/test-ulc-possible-linebreaks.c @@ -1,5 +1,5 @@ /* Test of line breaking of strings. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -71,8 +71,10 @@ int main () { test_function (ulc_possible_linebreaks, 2); -#undef ulc_possible_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef ulc_possible_linebreaks test_function (ulc_possible_linebreaks, 1); +#endif return 0; } diff --git a/tests/unilbrk/test-ulc-width-linebreaks.c b/tests/unilbrk/test-ulc-width-linebreaks.c index 0fffe3ae..65e125e5 100644 --- a/tests/unilbrk/test-ulc-width-linebreaks.c +++ b/tests/unilbrk/test-ulc-width-linebreaks.c @@ -1,5 +1,5 @@ /* Test of line breaking of strings. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -55,8 +55,10 @@ int main () { test_function (ulc_width_linebreaks, 2); -#undef ulc_width_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef ulc_width_linebreaks test_function (ulc_width_linebreaks, 1); +#endif return 0; } diff --git a/tests/unimetadata/test-u-version.c b/tests/unimetadata/test-u-version.c new file mode 100644 index 00000000..6dc48ad3 --- /dev/null +++ b/tests/unimetadata/test-u-version.c @@ -0,0 +1,39 @@ +/* Test of supported Unicode version. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2024. */ + +#include <config.h> + +#include "unimetadata.h" + +#include "macros.h" + +#if !(((defined _WIN32 || defined __CYGWIN__) && (HAVE_LIBUNISTRING || WOE32DLL)) || defined __ANDROID__) +/* Check that _libunistring_unicode_version is defined and links. */ +int const *vp = &_libunistring_unicode_version; +#endif + +int +main () +{ + /* Check that _libunistring_unicode_version is defined and links. */ + volatile int v = _libunistring_unicode_version; + ASSERT (v >= (15 << 8)); + ASSERT (v < (100 << 8)); + + return 0; +} diff --git a/tests/uniname/HangulSyllableNames.txt b/tests/uniname/HangulSyllableNames.txt index 341c178d..5491f661 100644 --- a/tests/uniname/HangulSyllableNames.txt +++ b/tests/uniname/HangulSyllableNames.txt @@ -1,5 +1,7 @@ # Auxiliary tables for Hangul syllable names, see the Unicode 3.0 book, -# sections 3.11 and 4.4. +# sections 3.11 and 4.4. This table was automatically generated. + +# This file is in the public domain. AC00;HANGUL SYLLABLE GA;Lo;0;L;;;;;N;;;;; AC01;HANGUL SYLLABLE GAG;Lo;0;L;;;;;N;;;;; diff --git a/tests/uniname/NameAliases.txt b/tests/uniname/NameAliases.txt index db3a863a..487cdb8c 100644 --- a/tests/uniname/NameAliases.txt +++ b/tests/uniname/NameAliases.txt @@ -1,6 +1,46 @@ -# NameAliases-15.0.0.txt -# Date: 2022-07-26, 20:13:00 GMT [KW] -# © 2022 Unicode®, Inc. +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. + +# NameAliases-15.1.0.txt +# Date: 2023-01-05 +# © 2023 Unicode®, Inc. # For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database diff --git a/tests/uniname/UnicodeData.txt b/tests/uniname/UnicodeData.txt index ea963a71..152ebe66 100644 --- a/tests/uniname/UnicodeData.txt +++ b/tests/uniname/UnicodeData.txt @@ -1,3 +1,43 @@ +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. + 0000;<control>;Cc;0;BN;;;;;N;NULL;;;; 0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;; 0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;; @@ -11231,6 +11271,10 @@ 2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; 2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; 2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; +2FFC;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM RIGHT;So;0;ON;;;;;N;;;;; +2FFD;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER RIGHT;So;0;ON;;;;;N;;;;; +2FFE;IDEOGRAPHIC DESCRIPTION CHARACTER HORIZONTAL REFLECTION;So;0;ON;;;;;N;;;;; +2FFF;IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION;So;0;ON;;;;;N;;;;; 3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;; 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; @@ -11705,6 +11749,7 @@ 31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; 31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; 31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; +31EF;IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION;So;0;ON;;;;;N;;;;; 31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; 31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; 31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; @@ -34035,6 +34080,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 2CEA1;<CJK Ideograph Extension E, Last>;Lo;0;L;;;;;N;;;;; 2CEB0;<CJK Ideograph Extension F, First>;Lo;0;L;;;;;N;;;;; 2EBE0;<CJK Ideograph Extension F, Last>;Lo;0;L;;;;;N;;;;; +2EBF0;<CJK Ideograph Extension I, First>;Lo;0;L;;;;;N;;;;; +2EE5D;<CJK Ideograph Extension I, Last>;Lo;0;L;;;;;N;;;;; 2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;; 2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;; 2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;; diff --git a/tests/uniname/test-uninames.c b/tests/uniname/test-uninames.c index c85c9af6..72e198ed 100644 --- a/tests/uniname/test-uninames.c +++ b/tests/uniname/test-uninames.c @@ -1,5 +1,5 @@ /* Test the Unicode character name functions. - Copyright (C) 2000-2003, 2005, 2007, 2009-2022 Free Software Foundation, + Copyright (C) 2000-2003, 2005, 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify diff --git a/tests/uninorm/NormalizationTest.txt b/tests/uninorm/NormalizationTest.txt index e75b4801..e1644a61 100644 --- a/tests/uninorm/NormalizationTest.txt +++ b/tests/uninorm/NormalizationTest.txt @@ -1,6 +1,46 @@ -# NormalizationTest-15.0.0.txt -# Date: 2022-04-02, 01:29:09 GMT -# © 2022 Unicode®, Inc. +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. + +# NormalizationTest-15.1.0.txt +# Date: 2023-01-05, 20:34:44 GMT +# © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # diff --git a/tests/uninorm/test-canonical-decomposition.c b/tests/uninorm/test-canonical-decomposition.c index 0e3fdbf4..6ebac8e5 100644 --- a/tests/uninorm/test-canonical-decomposition.c +++ b/tests/uninorm/test-canonical-decomposition.c @@ -1,5 +1,5 @@ /* Test of canonical decomposition of Unicode characters. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-compat-decomposition.c b/tests/uninorm/test-compat-decomposition.c index c0221310..d4252cbc 100644 --- a/tests/uninorm/test-compat-decomposition.c +++ b/tests/uninorm/test-compat-decomposition.c @@ -1,5 +1,5 @@ /* Test of compatibility decomposition of Unicode characters. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-composition.c b/tests/uninorm/test-composition.c index e6bdc970..4f90cfcb 100644 --- a/tests/uninorm/test-composition.c +++ b/tests/uninorm/test-composition.c @@ -1,5 +1,5 @@ /* Test of canonical composition of Unicode characters. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-decomposing-form.c b/tests/uninorm/test-decomposing-form.c index 17ad3bdb..d56cd28c 100644 --- a/tests/uninorm/test-decomposing-form.c +++ b/tests/uninorm/test-decomposing-form.c @@ -1,5 +1,5 @@ /* Test of decomposing variant of a normalization form. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-decomposition.c b/tests/uninorm/test-decomposition.c index d0e53e54..7da46143 100644 --- a/tests/uninorm/test-decomposition.c +++ b/tests/uninorm/test-decomposition.c @@ -1,5 +1,5 @@ /* Test of decomposition of Unicode characters. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-nfc.c b/tests/uninorm/test-nfc.c index db5b45d8..f1459ed3 100644 --- a/tests/uninorm/test-nfc.c +++ b/tests/uninorm/test-nfc.c @@ -1,5 +1,5 @@ /* Test of canonical normalization of Unicode strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-nfd.c b/tests/uninorm/test-nfd.c index 7d562e72..17df0f0e 100644 --- a/tests/uninorm/test-nfd.c +++ b/tests/uninorm/test-nfd.c @@ -1,5 +1,5 @@ /* Test of canonical decomposition of Unicode strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-nfkc.c b/tests/uninorm/test-nfkc.c index 56a43e76..640066c3 100644 --- a/tests/uninorm/test-nfkc.c +++ b/tests/uninorm/test-nfkc.c @@ -1,5 +1,5 @@ /* Test of compatibility normalization of Unicode strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-nfkd.c b/tests/uninorm/test-nfkd.c index 88ca6b50..8d5ff836 100644 --- a/tests/uninorm/test-nfkd.c +++ b/tests/uninorm/test-nfkd.c @@ -1,5 +1,5 @@ /* Test of compatibility decomposition of Unicode strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-nfc.c b/tests/uninorm/test-u16-nfc.c index fa3ebfcd..36cbf979 100644 --- a/tests/uninorm/test-u16-nfc.c +++ b/tests/uninorm/test-u16-nfc.c @@ -1,5 +1,5 @@ /* Test of canonical normalization of UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-nfd.c b/tests/uninorm/test-u16-nfd.c index 08b5c004..0be54c21 100644 --- a/tests/uninorm/test-u16-nfd.c +++ b/tests/uninorm/test-u16-nfd.c @@ -1,5 +1,5 @@ /* Test of canonical decomposition of UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-nfkc.c b/tests/uninorm/test-u16-nfkc.c index 7924d822..c6bedaf8 100644 --- a/tests/uninorm/test-u16-nfkc.c +++ b/tests/uninorm/test-u16-nfkc.c @@ -1,5 +1,5 @@ /* Test of compatibility normalization of UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-nfkd.c b/tests/uninorm/test-u16-nfkd.c index 1d78701d..f9a198c4 100644 --- a/tests/uninorm/test-u16-nfkd.c +++ b/tests/uninorm/test-u16-nfkd.c @@ -1,5 +1,5 @@ /* Test of compatibility decomposition of UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-normcmp.c b/tests/uninorm/test-u16-normcmp.c index 9ebb94b2..96ca0716 100644 --- a/tests/uninorm/test-u16-normcmp.c +++ b/tests/uninorm/test-u16-normcmp.c @@ -1,5 +1,5 @@ /* Test of normalization insensitive comparison of UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-normcmp.h b/tests/uninorm/test-u16-normcmp.h index 0c7ce100..09d5ba41 100644 --- a/tests/uninorm/test-u16-normcmp.h +++ b/tests/uninorm/test-u16-normcmp.h @@ -1,5 +1,5 @@ /* Test of normalization insensitive comparison of UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-normcoll.c b/tests/uninorm/test-u16-normcoll.c index e0689a30..fe08a15d 100644 --- a/tests/uninorm/test-u16-normcoll.c +++ b/tests/uninorm/test-u16-normcoll.c @@ -1,6 +1,6 @@ /* Test of locale dependent, normalization insensitive comparison of UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfc-big.c b/tests/uninorm/test-u32-nfc-big.c index b9f35e56..317607a1 100644 --- a/tests/uninorm/test-u32-nfc-big.c +++ b/tests/uninorm/test-u32-nfc-big.c @@ -1,5 +1,5 @@ /* Test of Unicode compliance of canonical normalization of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfc.c b/tests/uninorm/test-u32-nfc.c index 57b6a194..d6589c51 100644 --- a/tests/uninorm/test-u32-nfc.c +++ b/tests/uninorm/test-u32-nfc.c @@ -1,5 +1,5 @@ /* Test of canonical normalization of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfd-big.c b/tests/uninorm/test-u32-nfd-big.c index 683c768b..8a35cd03 100644 --- a/tests/uninorm/test-u32-nfd-big.c +++ b/tests/uninorm/test-u32-nfd-big.c @@ -1,5 +1,5 @@ /* Test of Unicode compliance of canonical decomposition of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfd.c b/tests/uninorm/test-u32-nfd.c index 33f2c97d..6b787724 100644 --- a/tests/uninorm/test-u32-nfd.c +++ b/tests/uninorm/test-u32-nfd.c @@ -1,5 +1,5 @@ /* Test of canonical decomposition of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfkc-big.c b/tests/uninorm/test-u32-nfkc-big.c index 84491129..4195b97e 100644 --- a/tests/uninorm/test-u32-nfkc-big.c +++ b/tests/uninorm/test-u32-nfkc-big.c @@ -1,5 +1,5 @@ /* Test of Unicode compliance of compatibility normalization of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfkc.c b/tests/uninorm/test-u32-nfkc.c index 7f8d472a..2b310def 100644 --- a/tests/uninorm/test-u32-nfkc.c +++ b/tests/uninorm/test-u32-nfkc.c @@ -1,5 +1,5 @@ /* Test of compatibility normalization of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfkd-big.c b/tests/uninorm/test-u32-nfkd-big.c index a2ca4673..f9c264d3 100644 --- a/tests/uninorm/test-u32-nfkd-big.c +++ b/tests/uninorm/test-u32-nfkd-big.c @@ -1,5 +1,5 @@ /* Test of Unicode compliance of compatibility decomposition of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfkd.c b/tests/uninorm/test-u32-nfkd.c index 3cbb5f7b..5093127c 100644 --- a/tests/uninorm/test-u32-nfkd.c +++ b/tests/uninorm/test-u32-nfkd.c @@ -1,5 +1,5 @@ /* Test of compatibility decomposition of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normalize-big.c b/tests/uninorm/test-u32-normalize-big.c index 40ef55cc..20282cab 100644 --- a/tests/uninorm/test-u32-normalize-big.c +++ b/tests/uninorm/test-u32-normalize-big.c @@ -1,5 +1,5 @@ /* Test of Unicode compliance of normalization of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normalize-big.h b/tests/uninorm/test-u32-normalize-big.h index 79b16264..ae4a16bd 100644 --- a/tests/uninorm/test-u32-normalize-big.h +++ b/tests/uninorm/test-u32-normalize-big.h @@ -1,5 +1,5 @@ /* Test of Unicode compliance of normalization of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normcmp.c b/tests/uninorm/test-u32-normcmp.c index 577edf6b..5052a237 100644 --- a/tests/uninorm/test-u32-normcmp.c +++ b/tests/uninorm/test-u32-normcmp.c @@ -1,5 +1,5 @@ /* Test of normalization insensitive comparison of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normcmp.h b/tests/uninorm/test-u32-normcmp.h index 1597c88e..f5979f1e 100644 --- a/tests/uninorm/test-u32-normcmp.h +++ b/tests/uninorm/test-u32-normcmp.h @@ -1,5 +1,5 @@ /* Test of normalization insensitive comparison of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normcoll.c b/tests/uninorm/test-u32-normcoll.c index 492475cc..e5cce080 100644 --- a/tests/uninorm/test-u32-normcoll.c +++ b/tests/uninorm/test-u32-normcoll.c @@ -1,6 +1,6 @@ /* Test of locale dependent, normalization insensitive comparison of UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-nfc.c b/tests/uninorm/test-u8-nfc.c index bfc56240..1aedcd85 100644 --- a/tests/uninorm/test-u8-nfc.c +++ b/tests/uninorm/test-u8-nfc.c @@ -1,5 +1,5 @@ /* Test of canonical normalization of UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-nfd.c b/tests/uninorm/test-u8-nfd.c index e5e3ac69..a6a5686b 100644 --- a/tests/uninorm/test-u8-nfd.c +++ b/tests/uninorm/test-u8-nfd.c @@ -1,5 +1,5 @@ /* Test of canonical decomposition of UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-nfkc.c b/tests/uninorm/test-u8-nfkc.c index f59bc036..c2a17839 100644 --- a/tests/uninorm/test-u8-nfkc.c +++ b/tests/uninorm/test-u8-nfkc.c @@ -1,5 +1,5 @@ /* Test of compatibility normalization of UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-nfkd.c b/tests/uninorm/test-u8-nfkd.c index 4fb89a5b..0a70a477 100644 --- a/tests/uninorm/test-u8-nfkd.c +++ b/tests/uninorm/test-u8-nfkd.c @@ -1,5 +1,5 @@ /* Test of compatibility decomposition of UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-normcmp.c b/tests/uninorm/test-u8-normcmp.c index 9d665e63..6b9f68d4 100644 --- a/tests/uninorm/test-u8-normcmp.c +++ b/tests/uninorm/test-u8-normcmp.c @@ -1,5 +1,5 @@ /* Test of normalization insensitive comparison of UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-normcmp.h b/tests/uninorm/test-u8-normcmp.h index c853c4a9..867cd2ce 100644 --- a/tests/uninorm/test-u8-normcmp.h +++ b/tests/uninorm/test-u8-normcmp.h @@ -1,5 +1,5 @@ /* Test of normalization insensitive comparison of UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-normcoll.c b/tests/uninorm/test-u8-normcoll.c index a113b4f5..e8d30949 100644 --- a/tests/uninorm/test-u8-normcoll.c +++ b/tests/uninorm/test-u8-normcoll.c @@ -1,6 +1,6 @@ /* Test of locale dependent, normalization insensitive comparison of UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-uninorm-filter-nfc.c b/tests/uninorm/test-uninorm-filter-nfc.c index ea9cdc0a..2e2ca2aa 100644 --- a/tests/uninorm/test-uninorm-filter-nfc.c +++ b/tests/uninorm/test-uninorm-filter-nfc.c @@ -1,5 +1,5 @@ /* Test of canonical normalization of streams. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-asnprintf1.c b/tests/unistdio/test-u16-asnprintf1.c index a95e6bfc..67ce490a 100644 --- a/tests/unistdio/test-u16-asnprintf1.c +++ b/tests/unistdio/test-u16-asnprintf1.c @@ -1,5 +1,5 @@ /* Test of u16_asnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-asnprintf1.h b/tests/unistdio/test-u16-asnprintf1.h index 4145ae87..4ec31a43 100644 --- a/tests/unistdio/test-u16-asnprintf1.h +++ b/tests/unistdio/test-u16-asnprintf1.h @@ -1,5 +1,5 @@ /* Test of u16_[v]asnprintf() function. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-printf1.h b/tests/unistdio/test-u16-printf1.h index 7690978d..e501c9e4 100644 --- a/tests/unistdio/test-u16-printf1.h +++ b/tests/unistdio/test-u16-printf1.h @@ -1,5 +1,5 @@ /* Test of u16_v[a]s[n]printf() function. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -83,6 +83,24 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) ASSERT (u16_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*U %d", 10, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*U %d", -10, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint16_t *result = my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); @@ -123,6 +141,24 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) ASSERT (u16_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*lU %d", 10, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*lU %d", -10, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint16_t *result = my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); @@ -163,6 +199,24 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) ASSERT (u16_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*llU %d", 10, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*llU %d", -10, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint16_t *result = my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); @@ -211,6 +265,32 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("Mr. %*s %d", 20, "Ronald Reagan", 33, 44, 55); + static const uint16_t expected[] = + { 'M', 'r', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', 'R', 'o', 'n', 'a', 'l', 'd', ' ', 'R', 'e', + 'a', 'g', 'a', 'n', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("Mr. %*s %d", -20, "Ronald Reagan", 33, 44, 55); + static const uint16_t expected[] = + { 'M', 'r', '.', ' ', 'R', 'o', 'n', 'a', 'l', 'd', + ' ', 'R', 'e', 'a', 'g', 'a', 'n', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ uint16_t *result = my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); @@ -278,6 +358,44 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*a %d", 10, 1.75, 33, 44, 55); + static const uint16_t expected1[] = + { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint16_t expected2[] = + { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint16_t expected3[] = + { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; + static const uint16_t expected4[] = + { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*a %d", -10, 1.75, 33, 44, 55); + static const uint16_t expected1[] = + { '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', ' ', ' ', '3', '3', 0 }; + static const uint16_t expected2[] = + { '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', ' ', ' ', '3', '3', 0 }; + static const uint16_t expected3[] = + { '0', 'x', '7', 'p', '-', '2', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + static const uint16_t expected4[] = + { '0', 'x', 'e', 'p', '-', '3', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + { /* Small precision. */ uint16_t *result = my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); @@ -402,6 +520,44 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*La %d", 10, 1.75L, 33, 44, 55); + static const uint16_t expected1[] = + { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint16_t expected2[] = + { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint16_t expected3[] = + { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; + static const uint16_t expected4[] = + { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*La %d", -10, 1.75L, 33, 44, 55); + static const uint16_t expected1[] = + { '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', ' ', ' ', '3', '3', 0 }; + static const uint16_t expected2[] = + { '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', ' ', ' ', '3', '3', 0 }; + static const uint16_t expected3[] = + { '0', 'x', '7', 'p', '-', '2', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + static const uint16_t expected4[] = + { '0', 'x', 'e', 'p', '-', '3', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + { /* Small precision. */ uint16_t *result = my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); @@ -502,6 +658,26 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*f %d", 10, 1.75, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*f %d", -10, 1.75, 33, 44, 55); + static const uint16_t expected[] = + { '1', '.', '7', '5', '0', '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint16_t *result = my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); @@ -532,6 +708,26 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*Lf %d", 10, 1.75L, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*Lf %d", -10, 1.75L, 33, 44, 55); + static const uint16_t expected[] = + { '1', '.', '7', '5', '0', '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint16_t *result = my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); @@ -620,6 +816,40 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*e %d", 15, 1.75, 33, 44, 55); + static const uint16_t expected1[] = + { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', + '0', 'e', '+', '0', '0', ' ', '3', '3', 0 + }; + static const uint16_t expected2[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', + 'e', '+', '0', '0', '0', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*e %d", -15, 1.75, 33, 44, 55); + static const uint16_t expected1[] = + { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', + '0', '0', ' ', ' ', ' ', ' ', '3', '3', 0 + }; + static const uint16_t expected2[] = + { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', + '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0); + free (result); + } + { /* Precision. */ uint16_t *result = my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); @@ -657,6 +887,30 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*Le %d", 15, 1.75L, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', + '0', 'e', '+', '0', '0', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*Le %d", -15, 1.75L, 33, 44, 55); + static const uint16_t expected[] = + { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', + '0', '0', ' ', ' ', ' ', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint16_t *result = my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); @@ -689,6 +943,26 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*g %d", 10, 1.75, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*g %d", -10, 1.75, 33, 44, 55); + static const uint16_t expected[] = + { '1', '.', '7', '5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint16_t *result = my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); @@ -722,6 +996,26 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*Lg %d", 10, 1.75L, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*Lg %d", -10, 1.75L, 33, 44, 55); + static const uint16_t expected[] = + { '1', '.', '7', '5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint16_t *result = my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); @@ -738,12 +1032,16 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) int count = -1; uint16_t *result = my_xasprintf ("%d %n", 123, &count, 33, 44, 55); +#if NEED_PRINTF_WITH_N_DIRECTIVE static const uint16_t expected[] = { '1', '2', '3', ' ', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (count == 4); free (result); +#else + ASSERT (result == NULL); +#endif } /* Test the support of the POSIX/XSI format strings with positions. */ @@ -795,6 +1093,30 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) ASSERT (u16_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*U %d", 20, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*U %d", -20, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint16_t *result = my_xasprintf ("%-20U %d", unicode_string, 33, 44, 55); @@ -850,6 +1172,30 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) ASSERT (u16_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*lU %d", 20, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*lU %d", -20, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint16_t *result = my_xasprintf ("%-20lU %d", unicode_string, 33, 44, 55); @@ -905,6 +1251,30 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) ASSERT (u16_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint16_t *result = + my_xasprintf ("%*llU %d", 20, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint16_t *result = + my_xasprintf ("%*llU %d", -20, unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint16_t *result = my_xasprintf ("%-20llU %d", unicode_string, 33, 44, 55); diff --git a/tests/unistdio/test-u16-vasnprintf1.c b/tests/unistdio/test-u16-vasnprintf1.c index de705ae6..e39495c9 100644 --- a/tests/unistdio/test-u16-vasnprintf1.c +++ b/tests/unistdio/test-u16-vasnprintf1.c @@ -1,5 +1,5 @@ /* Test of u16_vasnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vasnprintf2.c b/tests/unistdio/test-u16-vasnprintf2.c index ec5d790e..aee67584 100644 --- a/tests/unistdio/test-u16-vasnprintf2.c +++ b/tests/unistdio/test-u16-vasnprintf2.c @@ -1,5 +1,5 @@ /* Test of u16_vasnprintf() function in an ISO-8859-1 locale. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vasnprintf3.c b/tests/unistdio/test-u16-vasnprintf3.c index 97f3c69d..0efe1984 100644 --- a/tests/unistdio/test-u16-vasnprintf3.c +++ b/tests/unistdio/test-u16-vasnprintf3.c @@ -1,5 +1,5 @@ /* Test of u16_vasnprintf() function in an UTF-8 locale. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vasprintf1.c b/tests/unistdio/test-u16-vasprintf1.c index 1d00ec93..203d2edf 100644 --- a/tests/unistdio/test-u16-vasprintf1.c +++ b/tests/unistdio/test-u16-vasprintf1.c @@ -1,5 +1,5 @@ /* Test of u16_vasprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vsnprintf1.c b/tests/unistdio/test-u16-vsnprintf1.c index 27f3871a..6859468a 100644 --- a/tests/unistdio/test-u16-vsnprintf1.c +++ b/tests/unistdio/test-u16-vsnprintf1.c @@ -1,5 +1,5 @@ /* Test of u16_vsnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vsprintf1.c b/tests/unistdio/test-u16-vsprintf1.c index ab4d9d57..b39a3056 100644 --- a/tests/unistdio/test-u16-vsprintf1.c +++ b/tests/unistdio/test-u16-vsprintf1.c @@ -1,5 +1,5 @@ /* Test of u16_vsprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-asnprintf1.c b/tests/unistdio/test-u32-asnprintf1.c index aebc798e..5a16094b 100644 --- a/tests/unistdio/test-u32-asnprintf1.c +++ b/tests/unistdio/test-u32-asnprintf1.c @@ -1,5 +1,5 @@ /* Test of u32_asnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-asnprintf1.h b/tests/unistdio/test-u32-asnprintf1.h index b654c59a..85fa2cf0 100644 --- a/tests/unistdio/test-u32-asnprintf1.h +++ b/tests/unistdio/test-u32-asnprintf1.h @@ -1,5 +1,5 @@ /* Test of u32_[v]asnprintf() function. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-printf1.h b/tests/unistdio/test-u32-printf1.h index d3e10e92..ae0edc6a 100644 --- a/tests/unistdio/test-u32-printf1.h +++ b/tests/unistdio/test-u32-printf1.h @@ -1,5 +1,5 @@ /* Test of u32_v[a]s[n]printf() function. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -83,6 +83,24 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) ASSERT (u32_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*U %d", 10, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*U %d", -10, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint32_t *result = my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); @@ -123,6 +141,24 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) ASSERT (u32_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*lU %d", 10, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*lU %d", -10, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint32_t *result = my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); @@ -163,6 +199,24 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) ASSERT (u32_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*llU %d", 10, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*llU %d", -10, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint32_t *result = my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); @@ -211,6 +265,32 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("Mr. %*s %d", 20, "Ronald Reagan", 33, 44, 55); + static const uint32_t expected[] = + { 'M', 'r', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', 'R', 'o', 'n', 'a', 'l', 'd', ' ', 'R', 'e', + 'a', 'g', 'a', 'n', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("Mr. %*s %d", -20, "Ronald Reagan", 33, 44, 55); + static const uint32_t expected[] = + { 'M', 'r', '.', ' ', 'R', 'o', 'n', 'a', 'l', 'd', + ' ', 'R', 'e', 'a', 'g', 'a', 'n', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ uint32_t *result = my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); @@ -278,6 +358,44 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*a %d", 10, 1.75, 33, 44, 55); + static const uint32_t expected1[] = + { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint32_t expected2[] = + { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint32_t expected3[] = + { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; + static const uint32_t expected4[] = + { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*a %d", -10, 1.75, 33, 44, 55); + static const uint32_t expected1[] = + { '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', ' ', ' ', '3', '3', 0 }; + static const uint32_t expected2[] = + { '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', ' ', ' ', '3', '3', 0 }; + static const uint32_t expected3[] = + { '0', 'x', '7', 'p', '-', '2', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + static const uint32_t expected4[] = + { '0', 'x', 'e', 'p', '-', '3', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + { /* Small precision. */ uint32_t *result = my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); @@ -402,6 +520,44 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*La %d", 10, 1.75L, 33, 44, 55); + static const uint32_t expected1[] = + { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint32_t expected2[] = + { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint32_t expected3[] = + { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; + static const uint32_t expected4[] = + { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*La %d", -10, 1.75L, 33, 44, 55); + static const uint32_t expected1[] = + { '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', ' ', ' ', '3', '3', 0 }; + static const uint32_t expected2[] = + { '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', ' ', ' ', '3', '3', 0 }; + static const uint32_t expected3[] = + { '0', 'x', '7', 'p', '-', '2', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + static const uint32_t expected4[] = + { '0', 'x', 'e', 'p', '-', '3', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + { /* Small precision. */ uint32_t *result = my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); @@ -502,6 +658,26 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*f %d", 10, 1.75, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*f %d", -10, 1.75, 33, 44, 55); + static const uint32_t expected[] = + { '1', '.', '7', '5', '0', '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint32_t *result = my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); @@ -532,6 +708,26 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*Lf %d", 10, 1.75L, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*Lf %d", -10, 1.75L, 33, 44, 55); + static const uint32_t expected[] = + { '1', '.', '7', '5', '0', '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint32_t *result = my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); @@ -620,6 +816,40 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*e %d", 15, 1.75, 33, 44, 55); + static const uint32_t expected1[] = + { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', + '0', 'e', '+', '0', '0', ' ', '3', '3', 0 + }; + static const uint32_t expected2[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', + 'e', '+', '0', '0', '0', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*e %d", -15, 1.75, 33, 44, 55); + static const uint32_t expected1[] = + { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', + '0', '0', ' ', ' ', ' ', ' ', '3', '3', 0 + }; + static const uint32_t expected2[] = + { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', + '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0); + free (result); + } + { /* Precision. */ uint32_t *result = my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); @@ -657,6 +887,30 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*Le %d", 15, 1.75L, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', + '0', 'e', '+', '0', '0', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*Le %d", -15, 1.75L, 33, 44, 55); + static const uint32_t expected[] = + { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', + '0', '0', ' ', ' ', ' ', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint32_t *result = my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); @@ -689,6 +943,26 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*g %d", 10, 1.75, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*g %d", -10, 1.75, 33, 44, 55); + static const uint32_t expected[] = + { '1', '.', '7', '5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint32_t *result = my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); @@ -722,6 +996,26 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*Lg %d", 10, 1.75L, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*Lg %d", -10, 1.75L, 33, 44, 55); + static const uint32_t expected[] = + { '1', '.', '7', '5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint32_t *result = my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); @@ -738,12 +1032,16 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) int count = -1; uint32_t *result = my_xasprintf ("%d %n", 123, &count, 33, 44, 55); +#if NEED_PRINTF_WITH_N_DIRECTIVE static const uint32_t expected[] = { '1', '2', '3', ' ', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (count == 4); free (result); +#else + ASSERT (result == NULL); +#endif } /* Test the support of the POSIX/XSI format strings with positions. */ @@ -795,6 +1093,30 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) ASSERT (u32_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*U %d", 20, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*U %d", -20, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint32_t *result = my_xasprintf ("%-20U %d", unicode_string, 33, 44, 55); @@ -850,6 +1172,30 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) ASSERT (u32_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*lU %d", 20, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*lU %d", -20, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint32_t *result = my_xasprintf ("%-20lU %d", unicode_string, 33, 44, 55); @@ -905,6 +1251,30 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) ASSERT (u32_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint32_t *result = + my_xasprintf ("%*llU %d", 20, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint32_t *result = + my_xasprintf ("%*llU %d", -20, unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint32_t *result = my_xasprintf ("%-20llU %d", unicode_string, 33, 44, 55); diff --git a/tests/unistdio/test-u32-vasnprintf1.c b/tests/unistdio/test-u32-vasnprintf1.c index 553ee2d5..43c115cf 100644 --- a/tests/unistdio/test-u32-vasnprintf1.c +++ b/tests/unistdio/test-u32-vasnprintf1.c @@ -1,5 +1,5 @@ /* Test of u32_vasnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vasnprintf2.c b/tests/unistdio/test-u32-vasnprintf2.c index 7d82cfc6..1ddab53f 100644 --- a/tests/unistdio/test-u32-vasnprintf2.c +++ b/tests/unistdio/test-u32-vasnprintf2.c @@ -1,5 +1,5 @@ /* Test of u32_vasnprintf() function in an ISO-8859-1 locale. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vasnprintf3.c b/tests/unistdio/test-u32-vasnprintf3.c index 3509f6ff..cfc4674c 100644 --- a/tests/unistdio/test-u32-vasnprintf3.c +++ b/tests/unistdio/test-u32-vasnprintf3.c @@ -1,5 +1,5 @@ /* Test of u32_vasnprintf() function in an UTF-8 locale. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vasprintf1.c b/tests/unistdio/test-u32-vasprintf1.c index 41084b6d..3ab5e89c 100644 --- a/tests/unistdio/test-u32-vasprintf1.c +++ b/tests/unistdio/test-u32-vasprintf1.c @@ -1,5 +1,5 @@ /* Test of u32_vasprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vsnprintf1.c b/tests/unistdio/test-u32-vsnprintf1.c index bae3adca..fa38f8db 100644 --- a/tests/unistdio/test-u32-vsnprintf1.c +++ b/tests/unistdio/test-u32-vsnprintf1.c @@ -1,5 +1,5 @@ /* Test of u32_vsnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vsprintf1.c b/tests/unistdio/test-u32-vsprintf1.c index 27b0065c..c857ca71 100644 --- a/tests/unistdio/test-u32-vsprintf1.c +++ b/tests/unistdio/test-u32-vsprintf1.c @@ -1,5 +1,5 @@ /* Test of u32_vsprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-asnprintf1.c b/tests/unistdio/test-u8-asnprintf1.c index 058b7714..d5d256aa 100644 --- a/tests/unistdio/test-u8-asnprintf1.c +++ b/tests/unistdio/test-u8-asnprintf1.c @@ -1,5 +1,5 @@ /* Test of u8_asnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-asnprintf1.h b/tests/unistdio/test-u8-asnprintf1.h index 6aeeae31..f48e2365 100644 --- a/tests/unistdio/test-u8-asnprintf1.h +++ b/tests/unistdio/test-u8-asnprintf1.h @@ -1,5 +1,5 @@ /* Test of u8_[v]asnprintf() function. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-printf1.h b/tests/unistdio/test-u8-printf1.h index 5a820148..3e8999b6 100644 --- a/tests/unistdio/test-u8-printf1.h +++ b/tests/unistdio/test-u8-printf1.h @@ -1,5 +1,5 @@ /* Test of u8_v[a]s[n]printf() function. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -77,6 +77,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) ASSERT (u8_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*U %d", 10, unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*U %d", -10, unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint8_t *result = my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); @@ -113,6 +129,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) ASSERT (u8_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*lU %d", 10, unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*lU %d", -10, unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint8_t *result = my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); @@ -149,6 +181,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) ASSERT (u8_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*llU %d", 10, unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*llU %d", -10, unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint8_t *result = my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); @@ -187,6 +235,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("Mr. %*s %d", 20, "Ronald Reagan", 33, 44, 55); + static const uint8_t expected[] = "Mr. Ronald Reagan 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("Mr. %*s %d", -20, "Ronald Reagan", 33, 44, 55); + static const uint8_t expected[] = "Mr. Ronald Reagan 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ uint8_t *result = my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); @@ -238,6 +304,36 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*a %d", 10, 1.75, 33, 44, 55); + static const uint8_t expected1[] = " 0x1.cp+0 33"; + static const uint8_t expected2[] = " 0x3.8p-1 33"; + static const uint8_t expected3[] = " 0x7p-2 33"; + static const uint8_t expected4[] = " 0xep-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*a %d", -10, 1.75, 33, 44, 55); + static const uint8_t expected1[] = "0x1.cp+0 33"; + static const uint8_t expected2[] = "0x3.8p-1 33"; + static const uint8_t expected3[] = "0x7p-2 33"; + static const uint8_t expected4[] = "0xep-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + { /* Small precision. */ uint8_t *result = my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); @@ -298,6 +394,36 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*La %d", 10, 1.75L, 33, 44, 55); + static const uint8_t expected1[] = " 0x1.cp+0 33"; + static const uint8_t expected2[] = " 0x3.8p-1 33"; + static const uint8_t expected3[] = " 0x7p-2 33"; + static const uint8_t expected4[] = " 0xep-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*La %d", -10, 1.75L, 33, 44, 55); + static const uint8_t expected1[] = "0x1.cp+0 33"; + static const uint8_t expected2[] = "0x3.8p-1 33"; + static const uint8_t expected3[] = "0x7p-2 33"; + static const uint8_t expected4[] = "0xep-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + { /* Small precision. */ uint8_t *result = my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); @@ -348,6 +474,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*f %d", 10, 1.75, 33, 44, 55); + static const uint8_t expected[] = " 1.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*f %d", -10, 1.75, 33, 44, 55); + static const uint8_t expected[] = "1.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint8_t *result = my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); @@ -375,6 +519,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*Lf %d", 10, 1.75L, 33, 44, 55); + static const uint8_t expected[] = " 1.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*Lf %d", -10, 1.75L, 33, 44, 55); + static const uint8_t expected[] = "1.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint8_t *result = my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); @@ -446,6 +608,28 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*e %d", 15, 1.75, 33, 44, 55); + static const uint8_t expected1[] = " 1.750000e+00 33"; + static const uint8_t expected2[] = " 1.750000e+000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*e %d", -15, 1.75, 33, 44, 55); + static const uint8_t expected1[] = "1.750000e+00 33"; + static const uint8_t expected2[] = "1.750000e+000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0); + free (result); + } + { /* Precision. */ uint8_t *result = my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); @@ -475,6 +659,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*Le %d", 15, 1.75L, 33, 44, 55); + static const uint8_t expected[] = " 1.750000e+00 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*Le %d", -15, 1.75L, 33, 44, 55); + static const uint8_t expected[] = "1.750000e+00 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint8_t *result = my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); @@ -504,6 +706,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*g %d", 10, 1.75, 33, 44, 55); + static const uint8_t expected[] = " 1.75 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*g %d", -10, 1.75, 33, 44, 55); + static const uint8_t expected[] = "1.75 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint8_t *result = my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); @@ -533,6 +753,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*Lg %d", 10, 1.75L, 33, 44, 55); + static const uint8_t expected[] = " 1.75 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*Lg %d", -10, 1.75L, 33, 44, 55); + static const uint8_t expected[] = "1.75 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Precision. */ uint8_t *result = my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); @@ -548,11 +786,15 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) int count = -1; uint8_t *result = my_xasprintf ("%d %n", 123, &count, 33, 44, 55); +#if NEED_PRINTF_WITH_N_DIRECTIVE static const uint8_t expected[] = "123 "; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (count == 4); free (result); +#else + ASSERT (result == NULL); +#endif } /* Test the support of the POSIX/XSI format strings with positions. */ @@ -596,6 +838,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) ASSERT (u8_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*U %d", 20, unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*U %d", -20, unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint8_t *result = my_xasprintf ("%-20U %d", unicode_string, 33, 44, 55); @@ -636,6 +894,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) ASSERT (u8_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*lU %d", 20, unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*lU %d", -20, unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint8_t *result = my_xasprintf ("%-20lU %d", unicode_string, 33, 44, 55); @@ -676,6 +950,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) ASSERT (u8_strcmp (result, expected) == 0); free (result); } + { /* Width given as argument. */ + uint8_t *result = + my_xasprintf ("%*llU %d", 20, unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + uint8_t *result = + my_xasprintf ("%*llU %d", -20, unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } { /* FLAG_LEFT. */ uint8_t *result = my_xasprintf ("%-20llU %d", unicode_string, 33, 44, 55); diff --git a/tests/unistdio/test-u8-vasnprintf1.c b/tests/unistdio/test-u8-vasnprintf1.c index 94b9c8d7..895faa93 100644 --- a/tests/unistdio/test-u8-vasnprintf1.c +++ b/tests/unistdio/test-u8-vasnprintf1.c @@ -1,5 +1,5 @@ /* Test of u8_vasnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vasnprintf2.c b/tests/unistdio/test-u8-vasnprintf2.c index 745550b1..30289688 100644 --- a/tests/unistdio/test-u8-vasnprintf2.c +++ b/tests/unistdio/test-u8-vasnprintf2.c @@ -1,5 +1,5 @@ /* Test of u8_vasnprintf() function in an ISO-8859-1 locale. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vasnprintf3.c b/tests/unistdio/test-u8-vasnprintf3.c index 5f601abd..b5dc9ab6 100644 --- a/tests/unistdio/test-u8-vasnprintf3.c +++ b/tests/unistdio/test-u8-vasnprintf3.c @@ -1,5 +1,5 @@ /* Test of u8_vasnprintf() function in an UTF-8 locale. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vasprintf1.c b/tests/unistdio/test-u8-vasprintf1.c index ec7e773f..611f1395 100644 --- a/tests/unistdio/test-u8-vasprintf1.c +++ b/tests/unistdio/test-u8-vasprintf1.c @@ -1,5 +1,5 @@ /* Test of u8_vasprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vsnprintf1.c b/tests/unistdio/test-u8-vsnprintf1.c index 89274aa0..5de57fb1 100644 --- a/tests/unistdio/test-u8-vsnprintf1.c +++ b/tests/unistdio/test-u8-vsnprintf1.c @@ -1,5 +1,5 @@ /* Test of u8_vsnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vsprintf1.c b/tests/unistdio/test-u8-vsprintf1.c index 821880be..542cce32 100644 --- a/tests/unistdio/test-u8-vsprintf1.c +++ b/tests/unistdio/test-u8-vsprintf1.c @@ -1,5 +1,5 @@ /* Test of u8_vsprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-asnprintf1.c b/tests/unistdio/test-ulc-asnprintf1.c index 4cad53d5..236cd3b2 100644 --- a/tests/unistdio/test-ulc-asnprintf1.c +++ b/tests/unistdio/test-ulc-asnprintf1.c @@ -1,5 +1,5 @@ /* Test of ulc_asnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-asnprintf1.h b/tests/unistdio/test-ulc-asnprintf1.h index 3631c26e..9e11f314 100644 --- a/tests/unistdio/test-ulc-asnprintf1.h +++ b/tests/unistdio/test-ulc-asnprintf1.h @@ -1,5 +1,5 @@ /* Test of ulc_[v]asnprintf() functions. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-printf1.h b/tests/unistdio/test-ulc-printf1.h index a15effbb..49089c1b 100644 --- a/tests/unistdio/test-ulc-printf1.h +++ b/tests/unistdio/test-ulc-printf1.h @@ -1,5 +1,5 @@ /* Test of ulc_v[a]s[n]printf() functions. - Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -71,6 +71,20 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) ASSERT (strcmp (result, " Hello 33") == 0); free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*U %d", 10, unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Hello 33") == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*U %d", -10, unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Hello 33") == 0); + free (result); + } { /* FLAG_LEFT. */ char *result = my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); @@ -103,6 +117,20 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) ASSERT (strcmp (result, " Hello 33") == 0); free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*lU %d", 10, unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Hello 33") == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*lU %d", -10, unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Hello 33") == 0); + free (result); + } { /* FLAG_LEFT. */ char *result = my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); @@ -135,6 +163,20 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) ASSERT (strcmp (result, " Hello 33") == 0); free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*llU %d", 10, unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Hello 33") == 0); + free (result); + } + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*llU %d", -10, unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Hello 33") == 0); + free (result); + } { /* FLAG_LEFT. */ char *result = my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); @@ -169,6 +211,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("Mr. %*s %d", 20, "Ronald Reagan", 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Mr. Ronald Reagan 33") == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("Mr. %*s %d", -20, "Ronald Reagan", 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Mr. Ronald Reagan 33") == 0); + free (result); + } + { /* FLAG_LEFT. */ char *result = my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); @@ -210,6 +268,28 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*a %d", 10, 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 0x1.cp+0 33") == 0 + || strcmp (result, " 0x3.8p-1 33") == 0 + || strcmp (result, " 0x7p-2 33") == 0 + || strcmp (result, " 0xep-3 33") == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*a %d", -10, 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.cp+0 33") == 0 + || strcmp (result, "0x3.8p-1 33") == 0 + || strcmp (result, "0x7p-2 33") == 0 + || strcmp (result, "0xep-3 33") == 0); + free (result); + } + { /* Small precision. */ char *result = my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); @@ -254,6 +334,28 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*La %d", 10, 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 0x1.cp+0 33") == 0 + || strcmp (result, " 0x3.8p-1 33") == 0 + || strcmp (result, " 0x7p-2 33") == 0 + || strcmp (result, " 0xep-3 33") == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*La %d", -10, 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.cp+0 33") == 0 + || strcmp (result, "0x3.8p-1 33") == 0 + || strcmp (result, "0x7p-2 33") == 0 + || strcmp (result, "0xep-3 33") == 0); + free (result); + } + { /* Small precision. */ char *result = my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); @@ -294,6 +396,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*f %d", 10, 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000 33") == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*f %d", -10, 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000 33") == 0); + free (result); + } + { /* Precision. */ char *result = my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); @@ -318,6 +436,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*Lf %d", 10, 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000 33") == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*Lf %d", -10, 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000 33") == 0); + free (result); + } + { /* Precision. */ char *result = my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); @@ -380,6 +514,24 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*e %d", 15, 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000e+00 33") == 0 + || strcmp (result, " 1.750000e+000 33") == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*e %d", -15, 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000e+00 33") == 0 + || strcmp (result, "1.750000e+000 33") == 0); + free (result); + } + { /* Precision. */ char *result = my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); @@ -405,6 +557,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*Le %d", 15, 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000e+00 33") == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*Le %d", -15, 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000e+00 33") == 0); + free (result); + } + { /* Precision. */ char *result = my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); @@ -431,6 +599,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*g %d", 10, 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.75 33") == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*g %d", -10, 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.75 33") == 0); + free (result); + } + { /* Precision. */ char *result = my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); @@ -456,6 +640,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) free (result); } + { /* Width given as argument. */ + char *result = + my_xasprintf ("%*Lg %d", 10, 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.75 33") == 0); + free (result); + } + + { /* Negative width given as argument (cf. FLAG_LEFT below). */ + char *result = + my_xasprintf ("%*Lg %d", -10, 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.75 33") == 0); + free (result); + } + { /* Precision. */ char *result = my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); @@ -470,10 +670,14 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...)) int count = -1; char *result = my_xasprintf ("%d %n", 123, &count, 33, 44, 55); +#if NEED_PRINTF_WITH_N_DIRECTIVE ASSERT (result != NULL); ASSERT (strcmp (result, "123 ") == 0); ASSERT (count == 4); free (result); +#else + ASSERT (result == NULL); +#endif } /* Test the support of the POSIX/XSI format strings with positions. */ diff --git a/tests/unistdio/test-ulc-vasnprintf1.c b/tests/unistdio/test-ulc-vasnprintf1.c index d6ea67dd..d0d6f858 100644 --- a/tests/unistdio/test-ulc-vasnprintf1.c +++ b/tests/unistdio/test-ulc-vasnprintf1.c @@ -1,5 +1,5 @@ /* Test of ulc_vasnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vasnprintf2.c b/tests/unistdio/test-ulc-vasnprintf2.c index f53ff50f..458ce4aa 100644 --- a/tests/unistdio/test-ulc-vasnprintf2.c +++ b/tests/unistdio/test-ulc-vasnprintf2.c @@ -1,5 +1,5 @@ /* Test of ulc_vasnprintf() function in an ISO-8859-1 locale. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vasnprintf3.c b/tests/unistdio/test-ulc-vasnprintf3.c index 6bc2c9b5..717e9850 100644 --- a/tests/unistdio/test-ulc-vasnprintf3.c +++ b/tests/unistdio/test-ulc-vasnprintf3.c @@ -1,5 +1,5 @@ /* Test of ulc_vasnprintf() function in an UTF-8 locale. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vasprintf1.c b/tests/unistdio/test-ulc-vasprintf1.c index ec523ff4..c97909cc 100644 --- a/tests/unistdio/test-ulc-vasprintf1.c +++ b/tests/unistdio/test-ulc-vasprintf1.c @@ -1,5 +1,5 @@ /* Test of ulc_vasprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vsnprintf1.c b/tests/unistdio/test-ulc-vsnprintf1.c index c282ff99..899ad10b 100644 --- a/tests/unistdio/test-ulc-vsnprintf1.c +++ b/tests/unistdio/test-ulc-vsnprintf1.c @@ -1,5 +1,5 @@ /* Test of ulc_vsnprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vsprintf1.c b/tests/unistdio/test-ulc-vsprintf1.c index 9e9af160..123397d7 100644 --- a/tests/unistdio/test-ulc-vsprintf1.c +++ b/tests/unistdio/test-ulc-vsprintf1.c @@ -1,5 +1,5 @@ /* Test of ulc_vsprintf() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-chr.h b/tests/unistr/test-chr.h index f8f87015..f7bfc2ba 100644 --- a/tests/unistr/test-chr.h +++ b/tests/unistr/test-chr.h @@ -1,5 +1,5 @@ /* Test of uN_chr() functions. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,7 +20,6 @@ int main (void) { size_t size = 0x100000; - size_t i; size_t length; UNIT *input; uint32_t *input32 = (uint32_t *) malloc (size * sizeof (uint32_t)); @@ -29,7 +28,7 @@ main (void) input32[0] = 'a'; input32[1] = 'b'; u32_set (input32 + 2, 'c', 1024); - for (i = 1026; i < size - 2; i += 63) + for (size_t i = 1026; i < size - 2; i += 63) { size_t last = i + 63 < size - 2 ? i + 63 : size - 2; ucs4_t uc = 'd' | (i - 1026); @@ -48,9 +47,11 @@ main (void) ASSERT (U_CHR (input, length, 'a') == input); ASSERT (U_CHR (input, 0, 'a') == NULL); - void *page_boundary = zerosize_ptr (); - if (page_boundary) - ASSERT (U_CHR (page_boundary, 0, 'a') == NULL); + { + void *page_boundary = zerosize_ptr (); + if (page_boundary != NULL) + ASSERT (U_CHR (page_boundary, 0, 'a') == NULL); + } ASSERT (U_CHR (input, length, 'b') == input + 1); ASSERT (U_CHR (input, length, 'c') == input + 2); @@ -59,7 +60,7 @@ main (void) { UNIT *exp = input + 1026; UNIT *prev = input + 1; - for (i = 1026; i < size - 2; i += 63) + for (size_t i = 1026; i < size - 2; i += 63) { UNIT c[6]; size_t n; @@ -108,14 +109,14 @@ main (void) /* Check that uN_chr() does not read past the first occurrence of the byte being searched. */ { - char *page_boundary = (char *) zerosize_ptr (); + UNIT *page_boundary = zerosize_ptr (); size_t n; if (page_boundary != NULL) { for (n = 1; n <= 500 / sizeof (UNIT); n++) { - UNIT *mem = (UNIT *) (page_boundary - n * sizeof (UNIT)); + UNIT *mem = page_boundary - n; U_SET (mem, 'X', n); ASSERT (U_CHR (mem, n, 'U') == NULL); diff --git a/tests/unistr/test-cmp.h b/tests/unistr/test-cmp.h index c7c92434..3eb1be32 100644 --- a/tests/unistr/test-cmp.h +++ b/tests/unistr/test-cmp.h @@ -1,5 +1,5 @@ /* Test of uN_cmp() functions. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-cmp2.h b/tests/unistr/test-cmp2.h index 8fe88c54..3b9f7568 100644 --- a/tests/unistr/test-cmp2.h +++ b/tests/unistr/test-cmp2.h @@ -1,5 +1,5 @@ /* Test of uN_cmp2() functions. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-cpy-alloc.h b/tests/unistr/test-cpy-alloc.h index 5fa46a74..37b07350 100644 --- a/tests/unistr/test-cpy-alloc.h +++ b/tests/unistr/test-cpy-alloc.h @@ -1,5 +1,5 @@ /* Test of uN_cpy_alloc() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-cpy.h b/tests/unistr/test-cpy.h index 12379bb2..05f1f5a8 100644 --- a/tests/unistr/test-cpy.h +++ b/tests/unistr/test-cpy.h @@ -1,5 +1,5 @@ /* Test of uN_cpy() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-move.h b/tests/unistr/test-move.h index fd13b4cc..80784937 100644 --- a/tests/unistr/test-move.h +++ b/tests/unistr/test-move.h @@ -1,5 +1,5 @@ /* Test of uN_move() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-pcpy.h b/tests/unistr/test-pcpy.h new file mode 100644 index 00000000..92ae0d0e --- /dev/null +++ b/tests/unistr/test-pcpy.h @@ -0,0 +1,44 @@ +/* Test of uN_pcpy() functions. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023. */ + +int +main () +{ + /* Test small copying operations. */ + { + static const UNIT src[] = { 'c', 'l', 'i', 'm', 'a', 't', 'e' }; + size_t n; + + for (n = 0; n <= SIZEOF (src); n++) + { + UNIT dest[1 + SIZEOF (src) + 1] = + { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; + UNIT *ret; + size_t i; + + ret = U_PCPY (dest + 1, src, n); + ASSERT (ret == dest + 1 + n); + ASSERT (dest[0] == MAGIC); + for (i = 0; i < n; i++) + ASSERT (dest[1 + i] == src[i]); + ASSERT (dest[1 + n] == MAGIC); + } + } + + return 0; +} diff --git a/tests/unistr/test-set.h b/tests/unistr/test-set.h index 24330260..c1966675 100644 --- a/tests/unistr/test-set.h +++ b/tests/unistr/test-set.h @@ -1,5 +1,5 @@ /* Test of uN_set() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-stpcpy.h b/tests/unistr/test-stpcpy.h index 5b1d6615..e3fe8e5b 100644 --- a/tests/unistr/test-stpcpy.h +++ b/tests/unistr/test-stpcpy.h @@ -1,5 +1,5 @@ /* Test of uN_stpcpy() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-stpncpy.h b/tests/unistr/test-stpncpy.h index 34503bd2..3fc03d51 100644 --- a/tests/unistr/test-stpncpy.h +++ b/tests/unistr/test-stpncpy.h @@ -1,5 +1,5 @@ /* Test of uN_stpncpy() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strcat.h b/tests/unistr/test-strcat.h index 906528ff..12440c43 100644 --- a/tests/unistr/test-strcat.h +++ b/tests/unistr/test-strcat.h @@ -1,5 +1,5 @@ /* Test of uN_strcat() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strchr.h b/tests/unistr/test-strchr.h index 52768a4b..ad102c2e 100644 --- a/tests/unistr/test-strchr.h +++ b/tests/unistr/test-strchr.h @@ -1,5 +1,5 @@ /* Test of uN_strchr() functions. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,7 +22,6 @@ test_strchr (void) { size_t size = 0x100000; size_t length; - size_t i; UNIT *input; uint32_t *input32 = (uint32_t *) malloc ((size + 1) * sizeof (uint32_t)); ASSERT (input32); @@ -30,7 +29,7 @@ test_strchr (void) input32[0] = 'a'; input32[1] = 'b'; u32_set (input32 + 2, 'c', 1024); - for (i = 1026; i < size - 2; i += 63) + for (size_t i = 1026; i < size - 2; i += 63) { size_t last = i + 63 < size - 2 ? i + 63 : size - 2; ucs4_t uc = 'd' | (i - 1026); @@ -54,7 +53,7 @@ test_strchr (void) UNIT *exp = input + 1026; UNIT *prev = input + 2; - for (i = 1026; i < size - 2; i += 63) + for (size_t i = 1026; i < size - 2; i += 63) { UNIT c[6]; size_t n; diff --git a/tests/unistr/test-strcmp.h b/tests/unistr/test-strcmp.h index aeba3549..ea8c1321 100644 --- a/tests/unistr/test-strcmp.h +++ b/tests/unistr/test-strcmp.h @@ -1,5 +1,5 @@ /* Test of uN_strcmp() and uN_strcoll() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strcpy.h b/tests/unistr/test-strcpy.h index 1f145032..9ff1f992 100644 --- a/tests/unistr/test-strcpy.h +++ b/tests/unistr/test-strcpy.h @@ -1,5 +1,5 @@ /* Test of uN_strcpy() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strdup.h b/tests/unistr/test-strdup.h index 298a0459..af19c4d6 100644 --- a/tests/unistr/test-strdup.h +++ b/tests/unistr/test-strdup.h @@ -1,5 +1,5 @@ /* Test of uN_strdup() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strncat.h b/tests/unistr/test-strncat.h index c66583ec..c505fc26 100644 --- a/tests/unistr/test-strncat.h +++ b/tests/unistr/test-strncat.h @@ -1,5 +1,5 @@ /* Test of uN_strncat() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strncmp.h b/tests/unistr/test-strncmp.h index 8fdc4d99..64fecebb 100644 --- a/tests/unistr/test-strncmp.h +++ b/tests/unistr/test-strncmp.h @@ -1,5 +1,5 @@ /* Test of uN_strncmp() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strncpy.h b/tests/unistr/test-strncpy.h index f2774fb0..c3ad19c6 100644 --- a/tests/unistr/test-strncpy.h +++ b/tests/unistr/test-strncpy.h @@ -1,5 +1,5 @@ /* Test of uN_strncpy() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strnlen.h b/tests/unistr/test-strnlen.h index ba3c0cfd..abc83fb9 100644 --- a/tests/unistr/test-strnlen.h +++ b/tests/unistr/test-strnlen.h @@ -1,5 +1,5 @@ /* Test of uN_strnlen() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u-strstr.h b/tests/unistr/test-u-strstr.h index d53183e1..36783cdf 100644 --- a/tests/unistr/test-u-strstr.h +++ b/tests/unistr/test-u-strstr.h @@ -1,5 +1,5 @@ /* Test of uN_strstr() functions. - Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2004, 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -207,4 +207,42 @@ test_u_strstr (void) free (needle); free (haystack); } + + /* Test case from Yves Bastide. + <https://www.openwall.com/lists/musl/2014/04/18/2> */ + { + const UNIT input[] = + { 'p', 'l', 'a', 'y', 'i', 'n', 'g', ' ', 'p', 'l', 'a', 'y', ' ', 'p', + 'l', 'a', 'y', ' ', 'p', 'l', 'a', 'y', ' ', 'a', 'l', 'w', 'a', 'y', + 's', 0 + }; + const UNIT needle[] = + { 'p', 'l', 'a', 'y', ' ', 'p', 'l', 'a', 'y', ' ', 'p', 'l', 'a', 'y', + 0 + }; + const UNIT *result = U_STRSTR (input, needle); + ASSERT (result == input + 8); + } + + /* Test long needles. */ + { + size_t m = 1024; + UNIT *haystack = (UNIT *) malloc ((2 * m + 1) * sizeof (UNIT)); + UNIT *needle = (UNIT *) malloc ((m + 1) * sizeof (UNIT)); + if (haystack != NULL && needle != NULL) + { + const UNIT *p; + haystack[0] = 'x'; + U_SET (haystack + 1, ' ', m - 1); + U_SET (haystack + m, 'x', m); + haystack[2 * m] = '\0'; + U_SET (needle, 'x', m); + needle[m] = '\0'; + p = U_STRSTR (haystack, needle); + ASSERT (p); + ASSERT (p - haystack == m); + } + free (needle); + free (haystack); + } } diff --git a/tests/unistr/test-u-strtok.h b/tests/unistr/test-u-strtok.h index 15389ac1..74272d3b 100644 --- a/tests/unistr/test-u-strtok.h +++ b/tests/unistr/test-u-strtok.h @@ -1,5 +1,5 @@ /* Test of uN_strtok() functions. - Copyright (C) 2015-2022 Free Software Foundation, Inc. + Copyright (C) 2015-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,10 +50,12 @@ test_u_strtok (void) 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'D', 'E', 0 }; ucs4_t u_delim[] = { 0x3000, 0x3001, 0 }; - size_t input_len = 6 * SIZEOF (u_input); - UNIT *input = (UNIT *) malloc (input_len); - size_t delim_len = 6 * SIZEOF (u_delim); - UNIT *delim = (UNIT *) malloc (delim_len); + /* Convert ucs4_t[] to UNIT[]. + Every ucs4_t yields at most 4 / sizeof (UNIT) units. */ + size_t input_len = SIZEOF (u_input) * (4 / sizeof (UNIT)); + UNIT *input = (UNIT *) malloc (input_len * sizeof (UNIT)); + size_t delim_len = SIZEOF (u_delim) * (4 / sizeof (UNIT)); + UNIT *delim = (UNIT *) malloc (delim_len * sizeof (UNIT)); UNIT *state; const UNIT *result; UNIT *ptr, *first_ptr, *second_ptr; diff --git a/tests/unistr/test-u16-check.c b/tests/unistr/test-u16-check.c index eb7b9988..0d83d6ac 100644 --- a/tests/unistr/test-u16-check.c +++ b/tests/unistr/test-u16-check.c @@ -1,5 +1,5 @@ /* Test of u16_check() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-chr.c b/tests/unistr/test-u16-chr.c index 6e6e1069..5f0b16e5 100644 --- a/tests/unistr/test-u16-chr.c +++ b/tests/unistr/test-u16-chr.c @@ -1,5 +1,5 @@ /* Test of u16_chr() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-cmp.c b/tests/unistr/test-u16-cmp.c index 393fa9d7..03d6b4cd 100644 --- a/tests/unistr/test-u16-cmp.c +++ b/tests/unistr/test-u16-cmp.c @@ -1,5 +1,5 @@ /* Test of u16_cmp() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-cmp2.c b/tests/unistr/test-u16-cmp2.c index e25fe1a6..2eb0dbd0 100644 --- a/tests/unistr/test-u16-cmp2.c +++ b/tests/unistr/test-u16-cmp2.c @@ -1,5 +1,5 @@ /* Test of u16_cmp2() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-cpy-alloc.c b/tests/unistr/test-u16-cpy-alloc.c index 80e8999d..bbc16456 100644 --- a/tests/unistr/test-u16-cpy-alloc.c +++ b/tests/unistr/test-u16-cpy-alloc.c @@ -1,5 +1,5 @@ /* Test of u16_cpy_alloc() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-cpy.c b/tests/unistr/test-u16-cpy.c index be7f11aa..cf9993fa 100644 --- a/tests/unistr/test-u16-cpy.c +++ b/tests/unistr/test-u16-cpy.c @@ -1,5 +1,5 @@ /* Test of u16_cpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mblen.c b/tests/unistr/test-u16-mblen.c index 603cfe1f..a81a79a3 100644 --- a/tests/unistr/test-u16-mblen.c +++ b/tests/unistr/test-u16-mblen.c @@ -1,5 +1,5 @@ /* Test of u16_mblen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbsnlen.c b/tests/unistr/test-u16-mbsnlen.c index 02bf2030..f3a249f9 100644 --- a/tests/unistr/test-u16-mbsnlen.c +++ b/tests/unistr/test-u16-mbsnlen.c @@ -1,5 +1,5 @@ /* Test of u16_mbsnlen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbtouc-unsafe.c b/tests/unistr/test-u16-mbtouc-unsafe.c index 06d4e428..7fd02f27 100644 --- a/tests/unistr/test-u16-mbtouc-unsafe.c +++ b/tests/unistr/test-u16-mbtouc-unsafe.c @@ -1,5 +1,5 @@ /* Test of u16_mbtouc_unsafe() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbtouc.c b/tests/unistr/test-u16-mbtouc.c index 57a2b663..b7a3e47c 100644 --- a/tests/unistr/test-u16-mbtouc.c +++ b/tests/unistr/test-u16-mbtouc.c @@ -1,5 +1,5 @@ /* Test of u16_mbtouc() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbtouc.h b/tests/unistr/test-u16-mbtouc.h index a44a998d..5c33948a 100644 --- a/tests/unistr/test-u16-mbtouc.h +++ b/tests/unistr/test-u16-mbtouc.h @@ -1,5 +1,5 @@ /* Test of u16_mbtouc() and u16_mbtouc_unsafe() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbtoucr.c b/tests/unistr/test-u16-mbtoucr.c index dfdab67d..167a77e0 100644 --- a/tests/unistr/test-u16-mbtoucr.c +++ b/tests/unistr/test-u16-mbtoucr.c @@ -1,5 +1,5 @@ /* Test of u16_mbtoucr() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-move.c b/tests/unistr/test-u16-move.c index 8e050d44..887912b3 100644 --- a/tests/unistr/test-u16-move.c +++ b/tests/unistr/test-u16-move.c @@ -1,5 +1,5 @@ /* Test of u16_move() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-next.c b/tests/unistr/test-u16-next.c index e2022898..4d116e25 100644 --- a/tests/unistr/test-u16-next.c +++ b/tests/unistr/test-u16-next.c @@ -1,5 +1,5 @@ /* Test of u16_next() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-pcpy.c b/tests/unistr/test-u16-pcpy.c new file mode 100644 index 00000000..b20741e2 --- /dev/null +++ b/tests/unistr/test-u16-pcpy.c @@ -0,0 +1,28 @@ +/* Test of u16_pcpy() function. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023. */ + +#include <config.h> + +#include "unistr.h" + +#include "macros.h" + +#define UNIT uint16_t +#define U_PCPY u16_pcpy +#define MAGIC 0xBADE +#include "test-pcpy.h" diff --git a/tests/unistr/test-u16-prev.c b/tests/unistr/test-u16-prev.c index c7400dc5..bf05ea05 100644 --- a/tests/unistr/test-u16-prev.c +++ b/tests/unistr/test-u16-prev.c @@ -1,5 +1,5 @@ /* Test of u16_prev() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-set.c b/tests/unistr/test-u16-set.c index a5270d10..7a6597dd 100644 --- a/tests/unistr/test-u16-set.c +++ b/tests/unistr/test-u16-set.c @@ -1,5 +1,5 @@ /* Test of u16_set() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-stpcpy.c b/tests/unistr/test-u16-stpcpy.c index 5f18e011..616041d2 100644 --- a/tests/unistr/test-u16-stpcpy.c +++ b/tests/unistr/test-u16-stpcpy.c @@ -1,5 +1,5 @@ /* Test of u16_stpcpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-stpncpy.c b/tests/unistr/test-u16-stpncpy.c index 104ea16c..35dd20d5 100644 --- a/tests/unistr/test-u16-stpncpy.c +++ b/tests/unistr/test-u16-stpncpy.c @@ -1,5 +1,5 @@ /* Test of u16_stpncpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcat.c b/tests/unistr/test-u16-strcat.c index de5448b2..8ec36d4c 100644 --- a/tests/unistr/test-u16-strcat.c +++ b/tests/unistr/test-u16-strcat.c @@ -1,5 +1,5 @@ /* Test of u16_strcat() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strchr.c b/tests/unistr/test-u16-strchr.c index f4ec6881..e23df8c2 100644 --- a/tests/unistr/test-u16-strchr.c +++ b/tests/unistr/test-u16-strchr.c @@ -1,5 +1,5 @@ /* Test of u16_strchr() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcmp.c b/tests/unistr/test-u16-strcmp.c index 7ab3e831..4ee85078 100644 --- a/tests/unistr/test-u16-strcmp.c +++ b/tests/unistr/test-u16-strcmp.c @@ -1,5 +1,5 @@ /* Test of u16_strcmp() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcmp.h b/tests/unistr/test-u16-strcmp.h index 84b8d511..3a0f3b18 100644 --- a/tests/unistr/test-u16-strcmp.h +++ b/tests/unistr/test-u16-strcmp.h @@ -1,5 +1,5 @@ /* Test of u16_strcmp() and u16_strcoll() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcoll.c b/tests/unistr/test-u16-strcoll.c index 9ea43bca..b49f4b66 100644 --- a/tests/unistr/test-u16-strcoll.c +++ b/tests/unistr/test-u16-strcoll.c @@ -1,5 +1,5 @@ /* Test of u16_strcoll() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcpy.c b/tests/unistr/test-u16-strcpy.c index 7f0e01e6..9d2f475d 100644 --- a/tests/unistr/test-u16-strcpy.c +++ b/tests/unistr/test-u16-strcpy.c @@ -1,5 +1,5 @@ /* Test of u16_strcpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strdup.c b/tests/unistr/test-u16-strdup.c index 798831e1..936bddcb 100644 --- a/tests/unistr/test-u16-strdup.c +++ b/tests/unistr/test-u16-strdup.c @@ -1,5 +1,5 @@ /* Test of u16_strdup() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strlen.c b/tests/unistr/test-u16-strlen.c index 68198a41..e9348b81 100644 --- a/tests/unistr/test-u16-strlen.c +++ b/tests/unistr/test-u16-strlen.c @@ -1,5 +1,5 @@ /* Test of u16_strlen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strmblen.c b/tests/unistr/test-u16-strmblen.c index f31d824c..88dd0f27 100644 --- a/tests/unistr/test-u16-strmblen.c +++ b/tests/unistr/test-u16-strmblen.c @@ -1,5 +1,5 @@ /* Test of u16_strmblen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strmbtouc.c b/tests/unistr/test-u16-strmbtouc.c index bb7a5ca9..c4c76ca5 100644 --- a/tests/unistr/test-u16-strmbtouc.c +++ b/tests/unistr/test-u16-strmbtouc.c @@ -1,5 +1,5 @@ /* Test of u16_strmbtouc() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strncat.c b/tests/unistr/test-u16-strncat.c index 9eda6e15..6079cb71 100644 --- a/tests/unistr/test-u16-strncat.c +++ b/tests/unistr/test-u16-strncat.c @@ -1,5 +1,5 @@ /* Test of u16_strncat() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strncmp.c b/tests/unistr/test-u16-strncmp.c index 3d03a7a2..45bc9fab 100644 --- a/tests/unistr/test-u16-strncmp.c +++ b/tests/unistr/test-u16-strncmp.c @@ -1,5 +1,5 @@ /* Test of u16_strncmp() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strncpy.c b/tests/unistr/test-u16-strncpy.c index 184c6311..837dac9c 100644 --- a/tests/unistr/test-u16-strncpy.c +++ b/tests/unistr/test-u16-strncpy.c @@ -1,5 +1,5 @@ /* Test of u16_strncpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strnlen.c b/tests/unistr/test-u16-strnlen.c index 9258b965..48604fee 100644 --- a/tests/unistr/test-u16-strnlen.c +++ b/tests/unistr/test-u16-strnlen.c @@ -1,5 +1,5 @@ /* Test of u16_strnlen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strstr.c b/tests/unistr/test-u16-strstr.c index bbad6c61..4906a96f 100644 --- a/tests/unistr/test-u16-strstr.c +++ b/tests/unistr/test-u16-strstr.c @@ -1,5 +1,5 @@ /* Test of u16_strstr() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@ #define UNIT uint16_t #define U_STRSTR u16_strstr +#define U_SET u16_set #include "test-u-strstr.h" int diff --git a/tests/unistr/test-u16-strtok.c b/tests/unistr/test-u16-strtok.c index e226393d..ef9ffbb5 100644 --- a/tests/unistr/test-u16-strtok.c +++ b/tests/unistr/test-u16-strtok.c @@ -1,5 +1,5 @@ /* Test of u16_strtok() function. - Copyright (C) 2015-2022 Free Software Foundation, Inc. + Copyright (C) 2015-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-to-u32.c b/tests/unistr/test-u16-to-u32.c index de19d5a6..5b340451 100644 --- a/tests/unistr/test-u16-to-u32.c +++ b/tests/unistr/test-u16-to-u32.c @@ -1,5 +1,5 @@ /* Test of u16_to_u32() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-to-u8.c b/tests/unistr/test-u16-to-u8.c index acbad8ac..71b9a02e 100644 --- a/tests/unistr/test-u16-to-u8.c +++ b/tests/unistr/test-u16-to-u8.c @@ -1,5 +1,5 @@ /* Test of u16_to_u8() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-uctomb.c b/tests/unistr/test-u16-uctomb.c index 3408cba3..14338d63 100644 --- a/tests/unistr/test-u16-uctomb.c +++ b/tests/unistr/test-u16-uctomb.c @@ -1,5 +1,5 @@ /* Test of u16_uctomb() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-check.c b/tests/unistr/test-u32-check.c index 9b43b03e..fab64b23 100644 --- a/tests/unistr/test-u32-check.c +++ b/tests/unistr/test-u32-check.c @@ -1,5 +1,5 @@ /* Test of u32_check() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-chr.c b/tests/unistr/test-u32-chr.c index 7cd3912d..474681ff 100644 --- a/tests/unistr/test-u32-chr.c +++ b/tests/unistr/test-u32-chr.c @@ -1,5 +1,5 @@ /* Test of u32_chr() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-cmp.c b/tests/unistr/test-u32-cmp.c index d76024a2..57579eda 100644 --- a/tests/unistr/test-u32-cmp.c +++ b/tests/unistr/test-u32-cmp.c @@ -1,5 +1,5 @@ /* Test of u32_cmp() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-cmp2.c b/tests/unistr/test-u32-cmp2.c index b3d249da..0fbb8c0a 100644 --- a/tests/unistr/test-u32-cmp2.c +++ b/tests/unistr/test-u32-cmp2.c @@ -1,5 +1,5 @@ /* Test of u32_cmp2() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-cpy-alloc.c b/tests/unistr/test-u32-cpy-alloc.c index f9123115..f3f9d106 100644 --- a/tests/unistr/test-u32-cpy-alloc.c +++ b/tests/unistr/test-u32-cpy-alloc.c @@ -1,5 +1,5 @@ /* Test of u32_cpy_alloc() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-cpy.c b/tests/unistr/test-u32-cpy.c index b4f8f90a..0ba5f8b4 100644 --- a/tests/unistr/test-u32-cpy.c +++ b/tests/unistr/test-u32-cpy.c @@ -1,5 +1,5 @@ /* Test of u32_cpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mblen.c b/tests/unistr/test-u32-mblen.c index 6cfb22a2..5e8e0e29 100644 --- a/tests/unistr/test-u32-mblen.c +++ b/tests/unistr/test-u32-mblen.c @@ -1,5 +1,5 @@ /* Test of u32_mblen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbsnlen.c b/tests/unistr/test-u32-mbsnlen.c index 4ef6e316..e8f5c5da 100644 --- a/tests/unistr/test-u32-mbsnlen.c +++ b/tests/unistr/test-u32-mbsnlen.c @@ -1,5 +1,5 @@ /* Test of u32_mbsnlen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbtouc-unsafe.c b/tests/unistr/test-u32-mbtouc-unsafe.c index cfe0c4ca..111768db 100644 --- a/tests/unistr/test-u32-mbtouc-unsafe.c +++ b/tests/unistr/test-u32-mbtouc-unsafe.c @@ -1,5 +1,5 @@ /* Test of u32_mbtouc_unsafe() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbtouc.c b/tests/unistr/test-u32-mbtouc.c index b45e61e2..0804d8e4 100644 --- a/tests/unistr/test-u32-mbtouc.c +++ b/tests/unistr/test-u32-mbtouc.c @@ -1,5 +1,5 @@ /* Test of u32_mbtouc() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbtouc.h b/tests/unistr/test-u32-mbtouc.h index 1b226a16..37e6342f 100644 --- a/tests/unistr/test-u32-mbtouc.h +++ b/tests/unistr/test-u32-mbtouc.h @@ -1,5 +1,5 @@ /* Test of u32_mbtouc() and u32_mbtouc_unsafe() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbtoucr.c b/tests/unistr/test-u32-mbtoucr.c index 30c3ca29..7d74a87a 100644 --- a/tests/unistr/test-u32-mbtoucr.c +++ b/tests/unistr/test-u32-mbtoucr.c @@ -1,5 +1,5 @@ /* Test of u32_mbtoucr() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-move.c b/tests/unistr/test-u32-move.c index 26b730bd..82c9a379 100644 --- a/tests/unistr/test-u32-move.c +++ b/tests/unistr/test-u32-move.c @@ -1,5 +1,5 @@ /* Test of u32_move() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-next.c b/tests/unistr/test-u32-next.c index 42103347..320d520e 100644 --- a/tests/unistr/test-u32-next.c +++ b/tests/unistr/test-u32-next.c @@ -1,5 +1,5 @@ /* Test of u32_next() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-pcpy.c b/tests/unistr/test-u32-pcpy.c new file mode 100644 index 00000000..af77cc25 --- /dev/null +++ b/tests/unistr/test-u32-pcpy.c @@ -0,0 +1,28 @@ +/* Test of u32_pcpy() function. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023. */ + +#include <config.h> + +#include "unistr.h" + +#include "macros.h" + +#define UNIT uint32_t +#define U_PCPY u32_pcpy +#define MAGIC 0xBADFACE +#include "test-pcpy.h" diff --git a/tests/unistr/test-u32-prev.c b/tests/unistr/test-u32-prev.c index 5dd61f27..7e648dd1 100644 --- a/tests/unistr/test-u32-prev.c +++ b/tests/unistr/test-u32-prev.c @@ -1,5 +1,5 @@ /* Test of u32_prev() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-set.c b/tests/unistr/test-u32-set.c index 6551c9d5..99e644dc 100644 --- a/tests/unistr/test-u32-set.c +++ b/tests/unistr/test-u32-set.c @@ -1,5 +1,5 @@ /* Test of u32_set() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-stpcpy.c b/tests/unistr/test-u32-stpcpy.c index 9bb5adfc..c6ac1751 100644 --- a/tests/unistr/test-u32-stpcpy.c +++ b/tests/unistr/test-u32-stpcpy.c @@ -1,5 +1,5 @@ /* Test of u32_stpcpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-stpncpy.c b/tests/unistr/test-u32-stpncpy.c index 667fb221..a417fe0c 100644 --- a/tests/unistr/test-u32-stpncpy.c +++ b/tests/unistr/test-u32-stpncpy.c @@ -1,5 +1,5 @@ /* Test of u32_stpncpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcat.c b/tests/unistr/test-u32-strcat.c index cf6ed7fe..64e1b5cc 100644 --- a/tests/unistr/test-u32-strcat.c +++ b/tests/unistr/test-u32-strcat.c @@ -1,5 +1,5 @@ /* Test of u32_strcat() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strchr.c b/tests/unistr/test-u32-strchr.c index 1359e1a4..075d1d66 100644 --- a/tests/unistr/test-u32-strchr.c +++ b/tests/unistr/test-u32-strchr.c @@ -1,5 +1,5 @@ /* Test of u32_strchr() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcmp.c b/tests/unistr/test-u32-strcmp.c index e59bb93e..71fd0b1e 100644 --- a/tests/unistr/test-u32-strcmp.c +++ b/tests/unistr/test-u32-strcmp.c @@ -1,5 +1,5 @@ /* Test of u32_strcmp() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcmp.h b/tests/unistr/test-u32-strcmp.h index d32b8e04..4b149103 100644 --- a/tests/unistr/test-u32-strcmp.h +++ b/tests/unistr/test-u32-strcmp.h @@ -1,5 +1,5 @@ /* Test of u32_strcmp() and u32_strcoll() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcoll.c b/tests/unistr/test-u32-strcoll.c index 73fa65ae..bd3180e1 100644 --- a/tests/unistr/test-u32-strcoll.c +++ b/tests/unistr/test-u32-strcoll.c @@ -1,5 +1,5 @@ /* Test of u32_strcoll() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcpy.c b/tests/unistr/test-u32-strcpy.c index caf5d4af..22a6e70e 100644 --- a/tests/unistr/test-u32-strcpy.c +++ b/tests/unistr/test-u32-strcpy.c @@ -1,5 +1,5 @@ /* Test of u32_strcpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strdup.c b/tests/unistr/test-u32-strdup.c index 753e50c1..f81701fe 100644 --- a/tests/unistr/test-u32-strdup.c +++ b/tests/unistr/test-u32-strdup.c @@ -1,5 +1,5 @@ /* Test of u32_strdup() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strlen.c b/tests/unistr/test-u32-strlen.c index 6eeb00c0..6186fbdb 100644 --- a/tests/unistr/test-u32-strlen.c +++ b/tests/unistr/test-u32-strlen.c @@ -1,5 +1,5 @@ /* Test of u32_strlen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strmblen.c b/tests/unistr/test-u32-strmblen.c index e1ced4e1..62a5a0b0 100644 --- a/tests/unistr/test-u32-strmblen.c +++ b/tests/unistr/test-u32-strmblen.c @@ -1,5 +1,5 @@ /* Test of u32_strmblen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strmbtouc.c b/tests/unistr/test-u32-strmbtouc.c index 29f18316..19003098 100644 --- a/tests/unistr/test-u32-strmbtouc.c +++ b/tests/unistr/test-u32-strmbtouc.c @@ -1,5 +1,5 @@ /* Test of u32_strmbtouc() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strncat.c b/tests/unistr/test-u32-strncat.c index eac5119c..10b736d3 100644 --- a/tests/unistr/test-u32-strncat.c +++ b/tests/unistr/test-u32-strncat.c @@ -1,5 +1,5 @@ /* Test of u32_strncat() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strncmp.c b/tests/unistr/test-u32-strncmp.c index 33b8d69e..e304a595 100644 --- a/tests/unistr/test-u32-strncmp.c +++ b/tests/unistr/test-u32-strncmp.c @@ -1,5 +1,5 @@ /* Test of u32_strncmp() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strncpy.c b/tests/unistr/test-u32-strncpy.c index d65074dd..e78f0b25 100644 --- a/tests/unistr/test-u32-strncpy.c +++ b/tests/unistr/test-u32-strncpy.c @@ -1,5 +1,5 @@ /* Test of u32_strncpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strnlen.c b/tests/unistr/test-u32-strnlen.c index 8138efe6..31b69409 100644 --- a/tests/unistr/test-u32-strnlen.c +++ b/tests/unistr/test-u32-strnlen.c @@ -1,5 +1,5 @@ /* Test of u32_strnlen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strstr.c b/tests/unistr/test-u32-strstr.c index 6d29a69d..21caa784 100644 --- a/tests/unistr/test-u32-strstr.c +++ b/tests/unistr/test-u32-strstr.c @@ -1,5 +1,5 @@ /* Test of u32_strstr() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@ #define UNIT uint32_t #define U_STRSTR u32_strstr +#define U_SET u32_set #include "test-u-strstr.h" int diff --git a/tests/unistr/test-u32-strtok.c b/tests/unistr/test-u32-strtok.c index 442bc1a2..90aed3d6 100644 --- a/tests/unistr/test-u32-strtok.c +++ b/tests/unistr/test-u32-strtok.c @@ -1,5 +1,5 @@ /* Test of u32_strtok() function. - Copyright (C) 2015-2022 Free Software Foundation, Inc. + Copyright (C) 2015-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-to-u16.c b/tests/unistr/test-u32-to-u16.c index ac850089..fbf1a03a 100644 --- a/tests/unistr/test-u32-to-u16.c +++ b/tests/unistr/test-u32-to-u16.c @@ -1,5 +1,5 @@ /* Test of u32_to_u16() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-to-u8.c b/tests/unistr/test-u32-to-u8.c index 1a02f795..83144921 100644 --- a/tests/unistr/test-u32-to-u8.c +++ b/tests/unistr/test-u32-to-u8.c @@ -1,5 +1,5 @@ /* Test of u32_to_u8() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-uctomb.c b/tests/unistr/test-u32-uctomb.c index d3b1bb65..913398c8 100644 --- a/tests/unistr/test-u32-uctomb.c +++ b/tests/unistr/test-u32-uctomb.c @@ -1,5 +1,5 @@ /* Test of u32_uctomb() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-check.c b/tests/unistr/test-u8-check.c index 8e361cc8..d05c0fcb 100644 --- a/tests/unistr/test-u8-check.c +++ b/tests/unistr/test-u8-check.c @@ -1,5 +1,5 @@ /* Test of u8_check() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-chr.c b/tests/unistr/test-u8-chr.c index a0a46d95..c0827063 100644 --- a/tests/unistr/test-u8-chr.c +++ b/tests/unistr/test-u8-chr.c @@ -1,5 +1,5 @@ /* Test of u8_chr() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-cmp.c b/tests/unistr/test-u8-cmp.c index 528e691e..47b0f215 100644 --- a/tests/unistr/test-u8-cmp.c +++ b/tests/unistr/test-u8-cmp.c @@ -1,5 +1,5 @@ /* Test of u8_cmp() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-cmp2.c b/tests/unistr/test-u8-cmp2.c index 9a3b99cf..b5063784 100644 --- a/tests/unistr/test-u8-cmp2.c +++ b/tests/unistr/test-u8-cmp2.c @@ -1,5 +1,5 @@ /* Test of u8_cmp2() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-cpy-alloc.c b/tests/unistr/test-u8-cpy-alloc.c index 726148e8..d0e11542 100644 --- a/tests/unistr/test-u8-cpy-alloc.c +++ b/tests/unistr/test-u8-cpy-alloc.c @@ -1,5 +1,5 @@ /* Test of u8_cpy_alloc() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-cpy.c b/tests/unistr/test-u8-cpy.c index 58cc5f81..33987177 100644 --- a/tests/unistr/test-u8-cpy.c +++ b/tests/unistr/test-u8-cpy.c @@ -1,5 +1,5 @@ /* Test of u8_cpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-mblen.c b/tests/unistr/test-u8-mblen.c index 54dbd4b5..69ac7e55 100644 --- a/tests/unistr/test-u8-mblen.c +++ b/tests/unistr/test-u8-mblen.c @@ -1,5 +1,5 @@ /* Test of u8_mblen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-mbsnlen.c b/tests/unistr/test-u8-mbsnlen.c index 7b8f0292..ca31d856 100644 --- a/tests/unistr/test-u8-mbsnlen.c +++ b/tests/unistr/test-u8-mbsnlen.c @@ -1,5 +1,5 @@ /* Test of u8_mbsnlen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -61,9 +61,18 @@ main () that a "malformed sequence" is interpreted in the same way as "a character that is outside the adopted subset". Reference: + ISO 10646-1 amendment 2 + <https://www.cl.cam.ac.uk/~mgk25/ucs/ISO-10646-UTF-8.html> Markus Kuhn: UTF-8 decoder capability and stress test <https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt> <https://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html> + These old specifications (from ca. 2000) were a bit ambiguous, and the + definition of UTF-8 has changed a bit as well. The newer specification + we obey is the Unicode Standard, version 15. + Reference: + Unicode Standard 15.0.0, section 3.9 + <https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf> + pages 124..129, especially table 3-7. */ /* 3.1. Test that each unexpected continuation byte is signalled as a malformed sequence of its own. */ @@ -97,9 +106,14 @@ main () } /* 3.3.2. 3-byte sequence with last byte missing. */ { - static const uint8_t input[] = { '"', 0xE0, 0x80, '"' }; + static const uint8_t input[] = { '"', 0xE0, 0xA0, '"' }; ASSERT (u8_mbsnlen (input, 4) == 3); } + { + /* Outdated example: 0xE0 0x80 is an ill-formed sequence. */ + static const uint8_t input[] = { '"', 0xE0, 0x80, '"' }; + ASSERT (u8_mbsnlen (input, 4) == 4); + } /* 3.3.7. 3-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xEF, 0xBF, '"' }; @@ -107,14 +121,24 @@ main () } /* 3.3.3. 4-byte sequence with last byte missing. */ { - static const uint8_t input[] = { '"', 0xF0, 0x80, 0x80, '"' }; + static const uint8_t input[] = { '"', 0xF0, 0x90, 0x80, '"' }; ASSERT (u8_mbsnlen (input, 5) == 3); } + { + /* Outdated example: 0xF0 0x80 is an ill-formed sequence. */ + static const uint8_t input[] = { '"', 0xF0, 0x80, 0x80, '"' }; + ASSERT (u8_mbsnlen (input, 5) == 5); + } /* 3.3.8. 4-byte sequence with last byte missing. */ { - static const uint8_t input[] = { '"', 0xF7, 0xBF, 0xBF, '"' }; + static const uint8_t input[] = { '"', 0xF3, 0xBF, 0xBF, '"' }; ASSERT (u8_mbsnlen (input, 5) == 3); } + { + /* Outdated example: 0xF7 is an invalid first byte. */ + static const uint8_t input[] = { '"', 0xF7, 0xBF, 0xBF, '"' }; + ASSERT (u8_mbsnlen (input, 5) == 5); + } return 0; } diff --git a/tests/unistr/test-u8-mbtouc-unsafe.c b/tests/unistr/test-u8-mbtouc-unsafe.c index 1e29f8bc..8b471ea4 100644 --- a/tests/unistr/test-u8-mbtouc-unsafe.c +++ b/tests/unistr/test-u8-mbtouc-unsafe.c @@ -1,5 +1,5 @@ /* Test of u8_mbtouc_unsafe() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-mbtouc.c b/tests/unistr/test-u8-mbtouc.c index 39bcaef9..c063c9ab 100644 --- a/tests/unistr/test-u8-mbtouc.c +++ b/tests/unistr/test-u8-mbtouc.c @@ -1,5 +1,5 @@ /* Test of u8_mbtouc() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,9 +34,18 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t)) that a "malformed sequence" is interpreted in the same way as "a character that is outside the adopted subset". Reference: + ISO 10646-1 amendment 2 + <https://www.cl.cam.ac.uk/~mgk25/ucs/ISO-10646-UTF-8.html> Markus Kuhn: UTF-8 decoder capability and stress test <https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt> <https://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html> + These old specifications (from ca. 2000) were a bit ambiguous, and the + definition of UTF-8 has changed a bit as well. The newer specification + we obey is the Unicode Standard, version 15. + Reference: + Unicode Standard 15.0.0, section 3.9 + <https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf> + pages 124..129, especially table 3-7. */ /* 3.1. Test that each unexpected continuation byte is signalled as a malformed sequence of its own. */ @@ -118,7 +127,7 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t)) } /* 3.3.2. 3-byte sequence with last byte missing. */ { - static const uint8_t input[] = { '"', 0xE0, 0x80, '"' }; + static const uint8_t input[] = { '"', 0xE0, 0xA0, '"' }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 4); ASSERT (ret == 1); @@ -132,6 +141,26 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t)) ASSERT (ret == 1); ASSERT (uc == 0x0022); } + { + /* Outdated example: 0xE0 0x80 is an ill-formed sequence. */ + static const uint8_t input[] = { '"', 0xE0, 0x80, '"' }; + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input, 4); + ASSERT (ret == 1); + ASSERT (uc == 0x0022); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 1, 3); + ASSERT (ret == 1); + ASSERT (uc == 0xFFFD); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 2, 2); + ASSERT (ret == 1); + ASSERT (uc == 0xFFFD); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 3, 1); + ASSERT (ret == 1); + ASSERT (uc == 0x0022); + } /* 3.3.7. 3-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xEF, 0xBF, '"' }; @@ -150,7 +179,7 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t)) } /* 3.3.3. 4-byte sequence with last byte missing. */ { - static const uint8_t input[] = { '"', 0xF0, 0x80, 0x80, '"' }; + static const uint8_t input[] = { '"', 0xF0, 0x90, 0x80, '"' }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 5); ASSERT (ret == 1); @@ -164,9 +193,33 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t)) ASSERT (ret == 1); ASSERT (uc == 0x0022); } + { + /* Outdated example: 0xF0 0x80 is an ill-formed sequence. */ + static const uint8_t input[] = { '"', 0xF0, 0x80, 0x80, '"' }; + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input, 5); + ASSERT (ret == 1); + ASSERT (uc == 0x0022); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 1, 4); + ASSERT (ret == 1); + ASSERT (uc == 0xFFFD); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 2, 3); + ASSERT (ret == 1); + ASSERT (uc == 0xFFFD); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 3, 2); + ASSERT (ret == 1); + ASSERT (uc == 0xFFFD); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 4, 1); + ASSERT (ret == 1); + ASSERT (uc == 0x0022); + } /* 3.3.8. 4-byte sequence with last byte missing. */ { - static const uint8_t input[] = { '"', 0xF7, 0xBF, 0xBF, '"' }; + static const uint8_t input[] = { '"', 0xF3, 0xBF, 0xBF, '"' }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 5); ASSERT (ret == 1); @@ -180,6 +233,30 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t)) ASSERT (ret == 1); ASSERT (uc == 0x0022); } + { + /* Outdated example: 0xF7 is an invalid first byte. */ + static const uint8_t input[] = { '"', 0xF7, 0xBF, 0xBF, '"' }; + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input, 5); + ASSERT (ret == 1); + ASSERT (uc == 0x0022); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 1, 4); + ASSERT (ret == 1); + ASSERT (uc == 0xFFFD); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 2, 3); + ASSERT (ret == 1); + ASSERT (uc == 0xFFFD); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 3, 2); + ASSERT (ret == 1); + ASSERT (uc == 0xFFFD); + uc = 0xBADFACE; + ret = my_u8_mbtouc (&uc, input + 4, 1); + ASSERT (ret == 1); + ASSERT (uc == 0x0022); + } } int diff --git a/tests/unistr/test-u8-mbtouc.h b/tests/unistr/test-u8-mbtouc.h index fcfe3df8..dfe70be3 100644 --- a/tests/unistr/test-u8-mbtouc.h +++ b/tests/unistr/test-u8-mbtouc.h @@ -1,5 +1,5 @@ /* Test of u8_mbtouc() and u8_mbtouc_unsafe() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-mbtoucr.c b/tests/unistr/test-u8-mbtoucr.c index e6102603..6a4a74a2 100644 --- a/tests/unistr/test-u8-mbtoucr.c +++ b/tests/unistr/test-u8-mbtoucr.c @@ -1,5 +1,5 @@ /* Test of u8_mbtoucr() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-move.c b/tests/unistr/test-u8-move.c index baf074ec..a0c7ad79 100644 --- a/tests/unistr/test-u8-move.c +++ b/tests/unistr/test-u8-move.c @@ -1,5 +1,5 @@ /* Test of u8_move() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-next.c b/tests/unistr/test-u8-next.c index e3e43121..cdc1f763 100644 --- a/tests/unistr/test-u8-next.c +++ b/tests/unistr/test-u8-next.c @@ -1,5 +1,5 @@ /* Test of u8_next() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-pcpy.c b/tests/unistr/test-u8-pcpy.c new file mode 100644 index 00000000..dbd83ad5 --- /dev/null +++ b/tests/unistr/test-u8-pcpy.c @@ -0,0 +1,28 @@ +/* Test of u8_pcpy() function. + Copyright (C) 2010-2024 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023. */ + +#include <config.h> + +#include "unistr.h" + +#include "macros.h" + +#define UNIT uint8_t +#define U_PCPY u8_pcpy +#define MAGIC 0xBA +#include "test-pcpy.h" diff --git a/tests/unistr/test-u8-prev.c b/tests/unistr/test-u8-prev.c index 8b21ce29..5bbb5ce1 100644 --- a/tests/unistr/test-u8-prev.c +++ b/tests/unistr/test-u8-prev.c @@ -1,5 +1,5 @@ /* Test of u8_prev() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-set.c b/tests/unistr/test-u8-set.c index 223a5127..d06e0e0b 100644 --- a/tests/unistr/test-u8-set.c +++ b/tests/unistr/test-u8-set.c @@ -1,5 +1,5 @@ /* Test of u8_set() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-stpcpy.c b/tests/unistr/test-u8-stpcpy.c index daeb6ae9..6cdb850c 100644 --- a/tests/unistr/test-u8-stpcpy.c +++ b/tests/unistr/test-u8-stpcpy.c @@ -1,5 +1,5 @@ /* Test of u8_stpcpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-stpncpy.c b/tests/unistr/test-u8-stpncpy.c index a7987c31..873b1abd 100644 --- a/tests/unistr/test-u8-stpncpy.c +++ b/tests/unistr/test-u8-stpncpy.c @@ -1,5 +1,5 @@ /* Test of u8_stpncpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcat.c b/tests/unistr/test-u8-strcat.c index 9dde531d..2a999f66 100644 --- a/tests/unistr/test-u8-strcat.c +++ b/tests/unistr/test-u8-strcat.c @@ -1,5 +1,5 @@ /* Test of u8_strcat() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strchr.c b/tests/unistr/test-u8-strchr.c index cfd40779..69e21a66 100644 --- a/tests/unistr/test-u8-strchr.c +++ b/tests/unistr/test-u8-strchr.c @@ -1,5 +1,5 @@ /* Test of u8_strchr() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcmp.c b/tests/unistr/test-u8-strcmp.c index 447c6162..a0d3d7fc 100644 --- a/tests/unistr/test-u8-strcmp.c +++ b/tests/unistr/test-u8-strcmp.c @@ -1,5 +1,5 @@ /* Test of u8_strcmp() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcmp.h b/tests/unistr/test-u8-strcmp.h index 7eaf2887..177d4bfc 100644 --- a/tests/unistr/test-u8-strcmp.h +++ b/tests/unistr/test-u8-strcmp.h @@ -1,5 +1,5 @@ /* Test of u8_strcmp() and u8_strcoll() functions. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcoll.c b/tests/unistr/test-u8-strcoll.c index 7949e1a6..b86ea403 100644 --- a/tests/unistr/test-u8-strcoll.c +++ b/tests/unistr/test-u8-strcoll.c @@ -1,5 +1,5 @@ /* Test of u8_strcoll() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcpy.c b/tests/unistr/test-u8-strcpy.c index dd9b40bf..9cf181b1 100644 --- a/tests/unistr/test-u8-strcpy.c +++ b/tests/unistr/test-u8-strcpy.c @@ -1,5 +1,5 @@ /* Test of u8_strcpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strdup.c b/tests/unistr/test-u8-strdup.c index 84a35053..fdb76026 100644 --- a/tests/unistr/test-u8-strdup.c +++ b/tests/unistr/test-u8-strdup.c @@ -1,5 +1,5 @@ /* Test of u8_strdup() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strlen.c b/tests/unistr/test-u8-strlen.c index 91a59663..a13a24fd 100644 --- a/tests/unistr/test-u8-strlen.c +++ b/tests/unistr/test-u8-strlen.c @@ -1,5 +1,5 @@ /* Test of u8_strlen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strmblen.c b/tests/unistr/test-u8-strmblen.c index 735dd905..2fdef5cf 100644 --- a/tests/unistr/test-u8-strmblen.c +++ b/tests/unistr/test-u8-strmblen.c @@ -1,5 +1,5 @@ /* Test of u8_strmblen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strmbtouc.c b/tests/unistr/test-u8-strmbtouc.c index 74a96c1b..a9db79fa 100644 --- a/tests/unistr/test-u8-strmbtouc.c +++ b/tests/unistr/test-u8-strmbtouc.c @@ -1,5 +1,5 @@ /* Test of u8_strmbtouc() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strncat.c b/tests/unistr/test-u8-strncat.c index d0c854c4..166952a2 100644 --- a/tests/unistr/test-u8-strncat.c +++ b/tests/unistr/test-u8-strncat.c @@ -1,5 +1,5 @@ /* Test of u8_strncat() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strncmp.c b/tests/unistr/test-u8-strncmp.c index ada859ef..78aac0c9 100644 --- a/tests/unistr/test-u8-strncmp.c +++ b/tests/unistr/test-u8-strncmp.c @@ -1,5 +1,5 @@ /* Test of u8_strncmp() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strncpy.c b/tests/unistr/test-u8-strncpy.c index 824b85df..22bb35a4 100644 --- a/tests/unistr/test-u8-strncpy.c +++ b/tests/unistr/test-u8-strncpy.c @@ -1,5 +1,5 @@ /* Test of u8_strncpy() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strnlen.c b/tests/unistr/test-u8-strnlen.c index 1a740d0d..c409fc90 100644 --- a/tests/unistr/test-u8-strnlen.c +++ b/tests/unistr/test-u8-strnlen.c @@ -1,5 +1,5 @@ /* Test of u8_strnlen() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strstr.c b/tests/unistr/test-u8-strstr.c index b3610e46..791e1c97 100644 --- a/tests/unistr/test-u8-strstr.c +++ b/tests/unistr/test-u8-strstr.c @@ -1,5 +1,5 @@ /* Test of u8_strstr() function. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@ #define UNIT uint8_t #define U_STRSTR u8_strstr +#define U_SET u8_set #include "test-u-strstr.h" int diff --git a/tests/unistr/test-u8-strtok.c b/tests/unistr/test-u8-strtok.c index 11c364e8..8d425c40 100644 --- a/tests/unistr/test-u8-strtok.c +++ b/tests/unistr/test-u8-strtok.c @@ -1,5 +1,5 @@ /* Test of u8_strtok() function. - Copyright (C) 2015-2022 Free Software Foundation, Inc. + Copyright (C) 2015-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-to-u16.c b/tests/unistr/test-u8-to-u16.c index 377cf38d..ec104ace 100644 --- a/tests/unistr/test-u8-to-u16.c +++ b/tests/unistr/test-u8-to-u16.c @@ -1,5 +1,5 @@ /* Test of u8_to_u16() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-to-u32.c b/tests/unistr/test-u8-to-u32.c index 384c9dc9..5ab9752c 100644 --- a/tests/unistr/test-u8-to-u32.c +++ b/tests/unistr/test-u8-to-u32.c @@ -1,5 +1,5 @@ /* Test of u8_to_u32() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-uctomb.c b/tests/unistr/test-u8-uctomb.c index cf37cb9b..2948eb09 100644 --- a/tests/unistr/test-u8-uctomb.c +++ b/tests/unistr/test-u8-uctomb.c @@ -1,5 +1,5 @@ /* Test of u8_uctomb() function. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwbrk/WordBreakTest.txt b/tests/uniwbrk/WordBreakTest.txt index 27f64bfe..e4a41120 100644 --- a/tests/uniwbrk/WordBreakTest.txt +++ b/tests/uniwbrk/WordBreakTest.txt @@ -1,6 +1,46 @@ -# WordBreakTest-15.0.0.txt -# Date: 2022-02-26, 00:39:00 GMT -# © 2022 Unicode®, Inc. +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. + +# WordBreakTest-15.1.0.txt +# Date: 2023-03-31, 14:30:32 GMT +# © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # @@ -1708,6 +1748,9 @@ ÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [0.3] ÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] ARABIC LETTER NOON (ALetter) ÷ [0.3] ÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3] +÷ 0671 × 0644 × 0631 × 064E × 0651 × 062D × 0650 × 064A × 0645 × 0650 ÷ 0020 ÷ 06DD × 0661 ÷ # ÷ [0.2] ARABIC LETTER ALEF WASLA (ALetter) × [5.0] ARABIC LETTER LAM (ALetter) × [5.0] ARABIC LETTER REH (ALetter) × [4.0] ARABIC FATHA (Extend_FE) × [4.0] ARABIC SHADDA (Extend_FE) × [5.0] ARABIC LETTER HAH (ALetter) × [4.0] ARABIC KASRA (Extend_FE) × [5.0] ARABIC LETTER YEH (ALetter) × [5.0] ARABIC LETTER MEEM (ALetter) × [4.0] ARABIC KASRA (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [999.0] ARABIC END OF AYAH (Numeric) × [8.0] ARABIC-INDIC DIGIT ONE (Numeric) ÷ [0.3] +÷ 0721 × 0719 × 0721 × 0718 × 072A × 0710 ÷ 0020 ÷ 070F × 071D × 0717 ÷ # ÷ [0.2] SYRIAC LETTER MIM (ALetter) × [5.0] SYRIAC LETTER ZAIN (ALetter) × [5.0] SYRIAC LETTER MIM (ALetter) × [5.0] SYRIAC LETTER WAW (ALetter) × [5.0] SYRIAC LETTER RISH (ALetter) × [5.0] SYRIAC LETTER ALAPH (ALetter) ÷ [999.0] SPACE (WSegSpace) ÷ [999.0] SYRIAC ABBREVIATION MARK (ALetter) × [5.0] SYRIAC LETTER YUDH (ALetter) × [5.0] SYRIAC LETTER HE (ALetter) ÷ [0.3] +÷ 072C × 070F × 072B × 0712 × 0718 ÷ # ÷ [0.2] SYRIAC LETTER TAW (ALetter) × [5.0] SYRIAC ABBREVIATION MARK (ALetter) × [5.0] SYRIAC LETTER SHIN (ALetter) × [5.0] SYRIAC LETTER BETH (ALetter) × [5.0] SYRIAC LETTER WAW (ALetter) ÷ [0.3] ÷ 0041 × 0041 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0041 × 003A × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0041 ÷ 003A ÷ 003A ÷ 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] @@ -1846,6 +1889,6 @@ ÷ 0061 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] # -# Lines: 1823 +# Lines: 1826 # # EOF diff --git a/tests/uniwbrk/test-u16-wordbreaks.c b/tests/uniwbrk/test-u16-wordbreaks.c index 8ee67f6d..002668c3 100644 --- a/tests/uniwbrk/test-u16-wordbreaks.c +++ b/tests/uniwbrk/test-u16-wordbreaks.c @@ -1,5 +1,5 @@ /* Test of word breaks in UTF-16 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwbrk/test-u32-wordbreaks.c b/tests/uniwbrk/test-u32-wordbreaks.c index 57c37639..ac9c1e36 100644 --- a/tests/uniwbrk/test-u32-wordbreaks.c +++ b/tests/uniwbrk/test-u32-wordbreaks.c @@ -1,5 +1,5 @@ /* Test of word breaks in UTF-32 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwbrk/test-u8-wordbreaks.c b/tests/uniwbrk/test-u8-wordbreaks.c index 74c546b0..2aaa0e92 100644 --- a/tests/uniwbrk/test-u8-wordbreaks.c +++ b/tests/uniwbrk/test-u8-wordbreaks.c @@ -1,5 +1,5 @@ /* Test of word breaks in UTF-8 strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwbrk/test-uc-wordbreaks.c b/tests/uniwbrk/test-uc-wordbreaks.c index 3bf1ff58..8213446f 100644 --- a/tests/uniwbrk/test-uc-wordbreaks.c +++ b/tests/uniwbrk/test-uc-wordbreaks.c @@ -1,5 +1,5 @@ /* Word break function test, using test data from UCD. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published diff --git a/tests/uniwbrk/test-ulc-wordbreaks.c b/tests/uniwbrk/test-ulc-wordbreaks.c index 6f3203fe..bb4b3343 100644 --- a/tests/uniwbrk/test-ulc-wordbreaks.c +++ b/tests/uniwbrk/test-ulc-wordbreaks.c @@ -1,5 +1,5 @@ /* Test of word breaks in strings. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u16-strwidth.c b/tests/uniwidth/test-u16-strwidth.c index a41d47c0..ecf7f178 100644 --- a/tests/uniwidth/test-u16-strwidth.c +++ b/tests/uniwidth/test-u16-strwidth.c @@ -1,5 +1,5 @@ /* Test of u16_strwidth() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u16-width.c b/tests/uniwidth/test-u16-width.c index c8dc1ad9..8b25ccf8 100644 --- a/tests/uniwidth/test-u16-width.c +++ b/tests/uniwidth/test-u16-width.c @@ -1,5 +1,5 @@ /* Test of u16_width() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u32-strwidth.c b/tests/uniwidth/test-u32-strwidth.c index 6e627a4b..e3f2d027 100644 --- a/tests/uniwidth/test-u32-strwidth.c +++ b/tests/uniwidth/test-u32-strwidth.c @@ -1,5 +1,5 @@ /* Test of u32_strwidth() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u32-width.c b/tests/uniwidth/test-u32-width.c index 4c92c852..caa35ca9 100644 --- a/tests/uniwidth/test-u32-width.c +++ b/tests/uniwidth/test-u32-width.c @@ -1,5 +1,5 @@ /* Test of u32_width() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u8-strwidth.c b/tests/uniwidth/test-u8-strwidth.c index 90fa4369..8f54953f 100644 --- a/tests/uniwidth/test-u8-strwidth.c +++ b/tests/uniwidth/test-u8-strwidth.c @@ -1,5 +1,5 @@ /* Test of u8_strwidth() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u8-width.c b/tests/uniwidth/test-u8-width.c index eb56bc00..75ce8e82 100644 --- a/tests/uniwidth/test-u8-width.c +++ b/tests/uniwidth/test-u8-width.c @@ -1,5 +1,5 @@ /* Test of u8_width() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-uc_width.c b/tests/uniwidth/test-uc_width.c index 86389b26..5f0e793f 100644 --- a/tests/uniwidth/test-uc_width.c +++ b/tests/uniwidth/test-uc_width.c @@ -1,5 +1,5 @@ /* Test of uc_width() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-uc_width2.c b/tests/uniwidth/test-uc_width2.c index d088cf39..a07a11f8 100644 --- a/tests/uniwidth/test-uc_width2.c +++ b/tests/uniwidth/test-uc_width2.c @@ -1,5 +1,5 @@ /* Test of uc_width() function. - Copyright (C) 2007-2022 Free Software Foundation, Inc. + Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-uc_width2.sh b/tests/uniwidth/test-uc_width2.sh index 2833aef1..c46b3d07 100755 --- a/tests/uniwidth/test-uc_width2.sh +++ b/tests/uniwidth/test-uc_width2.sh @@ -1,7 +1,7 @@ #!/bin/sh tmpfiles="" -trap 'rm -fr $tmpfiles' 1 2 3 15 +trap 'rm -fr $tmpfiles' HUP INT QUIT TERM tmpfiles="$tmpfiles uc_width.out" ${CHECKER} ./test-uc_width2${EXEEXT} | LC_ALL=C tr -d '\r' > uc_width.out @@ -27,9 +27,7 @@ cat > uc_width.ok <<\EOF 05C4..05C5 0 05C6 A 05C7 0 -05C8..05FF A -0600..0605 0 -0606..060F A +05C8..060F A 0610..061A 0 061B A 061C 0 @@ -38,16 +36,14 @@ cat > uc_width.ok <<\EOF 0660..066F A 0670 0 0671..06D5 A -06D6..06DD 0 -06DE A +06D6..06DC 0 +06DD..06DE A 06DF..06E4 0 06E5..06E6 A 06E7..06E8 0 06E9 A 06EA..06ED 0 -06EE..070E A -070F 0 -0710 A +06EE..0710 A 0711 0 0712..072F A 0730..074A 0 @@ -67,12 +63,12 @@ cat > uc_width.ok <<\EOF 0829..082D 0 082E..0858 A 0859..085B 0 -085C..088F A -0890..0891 0 -0892..0897 A +085C..0897 A 0898..089F 0 08A0..08C9 A -08CA..0902 0 +08CA..08E1 0 +08E2 A +08E3..0902 0 0903..0939 A 093A 0 093B A @@ -580,13 +576,9 @@ FFFC..101FC 1 110B3..110B6 0 110B7..110B8 1 110B9..110BA 0 -110BB..110BC 1 -110BD 0 -110BE..110C1 1 +110BB..110C1 1 110C2 0 -110C3..110CC 1 -110CD 0 -110CE..110FF 1 +110C3..110FF 1 11100..11102 0 11103..11126 1 11127..1112B 0 diff --git a/tests/unsetenv.c b/tests/unsetenv.c index 07eac6fd..d8ada2aa 100644 --- a/tests/unsetenv.c +++ b/tests/unsetenv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995-2002, 2005-2022 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995-2002, 2005-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify diff --git a/tests/usleep.c b/tests/usleep.c index e4289c4a..4d325016 100644 --- a/tests/usleep.c +++ b/tests/usleep.c @@ -1,5 +1,5 @@ /* Pausing execution of the current thread. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. Written by Eric Blake <ebb9@byu.net>, 2009. This file is free software: you can redistribute it and/or modify diff --git a/tests/verify.h b/tests/verify.h index 99af8029..08268c24 100644 --- a/tests/verify.h +++ b/tests/verify.h @@ -1,6 +1,6 @@ /* Compile-time assert-like macros. - Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -37,7 +37,7 @@ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 5 <= __clang_major__))) # define _GL_HAVE__STATIC_ASSERT 1 # endif -# if (202000 <= __STDC_VERSION__ \ +# if (202311 <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ && 9 <= __GNUC__)) # define _GL_HAVE__STATIC_ASSERT1 1 # endif @@ -188,9 +188,9 @@ template <int w> _gl_verify_type<(R) ? 1 : -1> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ - struct { \ - _Static_assert (R, DIAGNOSTIC); \ - int _gl_dummy; \ + struct { \ + _Static_assert (R, DIAGNOSTIC); \ + int _gl_dummy; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ @@ -212,8 +212,8 @@ template <int w> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC) #else -# define _GL_VERIFY(R, DIAGNOSTIC, ...) \ - extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ +# define _GL_VERIFY(R, DIAGNOSTIC, ...) \ + extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] # if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wnested-externs" @@ -222,28 +222,57 @@ template <int w> /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H -# if !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert -# define _Static_assert(R, ...) \ - _GL_VERIFY ((R), "static assertion failed", -) +/* Define _Static_assert if needed. */ +/* With clang ≥ 3.8.0 in C++ mode, _Static_assert already works and accepts + 1 or 2 arguments. We better don't override it, because clang's standard + C++ library uses static_assert inside classes in several places, and our + replacement via _GL_VERIFY does not work in these contexts. */ +# if (defined __cplusplus && defined __clang__ \ + && (4 <= __clang_major__ + (8 <= __clang_minor__))) +# if 5 <= __clang_major__ +/* Avoid "warning: 'static_assert' with no message is a C++17 extension". */ +# pragma clang diagnostic ignored "-Wc++17-extensions" +# else +/* Avoid "warning: static_assert with no message is a C++1z extension". */ +# pragma clang diagnostic ignored "-Wc++1z-extensions" +# endif +# elif !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert +# if !defined _MSC_VER || defined __clang__ +# define _Static_assert(...) \ + _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) +# else +# if defined __cplusplus && _MSC_VER >= 1910 + /* In MSVC 14.1 or newer, static_assert accepts one or two arguments, + but _Static_assert is not defined. */ +# define _Static_assert static_assert +# else + /* Work around MSVC preprocessor incompatibility with ISO C; see + <https://stackoverflow.com/questions/5134523/>. */ +# define _Static_assert(R, ...) \ + _GL_VERIFY ((R), "static assertion failed", -) +# endif +# endif # endif +/* Define static_assert if needed. */ # if (!defined static_assert \ && __STDC_VERSION__ < 202311 \ && (!defined __cplusplus \ || (__cpp_static_assert < 201411 \ - && __GNUG__ < 6 && __clang_major__ < 6))) + && __GNUG__ < 6 && __clang_major__ < 6 && _MSC_VER < 1910))) # if defined __cplusplus && _MSC_VER >= 1900 && !defined __clang__ /* MSVC 14 in C++ mode supports the two-arguments static_assert but not the one-argument static_assert, and it does not support _Static_assert. We have to play preprocessor tricks to distinguish the two cases. - Since the MSVC preprocessor is not ISO C compliant (cf. - <https://stackoverflow.com/questions/5134523/>), the solution is specific - to MSVC. */ + Since the MSVC preprocessor is not ISO C compliant (see above),. + the solution is specific to MSVC. */ # define _GL_EXPAND(x) x # define _GL_SA1(a1) static_assert ((a1), "static assertion failed") # define _GL_SA2 static_assert # define _GL_SA3 static_assert # define _GL_SA_PICK(x1,x2,x3,x4,...) x4 # define static_assert(...) _GL_EXPAND(_GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1)) (__VA_ARGS__) +/* Avoid "fatal error C1189: #error: The C++ Standard Library forbids macroizing keywords." */ +# define _ALLOW_KEYWORD_MACROS 1 # else # define static_assert _Static_assert /* C11 requires this #define. */ # endif @@ -252,7 +281,9 @@ template <int w> /* @assert.h omit start@ */ -#if 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) +#if defined __clang_major__ && __clang_major__ < 5 +# define _GL_HAS_BUILTIN_TRAP 0 +#elif 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) # define _GL_HAS_BUILTIN_TRAP 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap) @@ -260,12 +291,16 @@ template <int w> # define _GL_HAS_BUILTIN_TRAP 0 #endif -#if 4 < __GNUC__ + (5 <= __GNUC_MINOR__) -# define _GL_HAS_BUILTIN_UNREACHABLE 1 -#elif defined __has_builtin -# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) -#else -# define _GL_HAS_BUILTIN_UNREACHABLE 0 +#ifndef _GL_HAS_BUILTIN_UNREACHABLE +# if defined __clang_major__ && __clang_major__ < 5 +# define _GL_HAS_BUILTIN_UNREACHABLE 0 +# elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__) +# define _GL_HAS_BUILTIN_UNREACHABLE 1 +# elif defined __has_builtin +# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) +# else +# define _GL_HAS_BUILTIN_UNREACHABLE 0 +# endif #endif /* Each of these macros verifies that its argument R is nonzero. To diff --git a/tests/w32sock.h b/tests/w32sock.h index 17db3f12..166a5f77 100644 --- a/tests/w32sock.h +++ b/tests/w32sock.h @@ -1,6 +1,6 @@ /* w32sock.h --- internal auxiliary functions for Windows socket functions - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/warn-on-use.h b/tests/warn-on-use.h index 94f5b920..701013a0 100644 --- a/tests/warn-on-use.h +++ b/tests/warn-on-use.h @@ -1,5 +1,5 @@ /* A C macro for emitting warnings if a function is used. - Copyright (C) 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -32,6 +32,10 @@ _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' linkage. + _GL_WARN_ON_USE should not be used more than once for a given function + in a given compilation unit (because this may generate a warning even + if the function is never called). + However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the diff --git a/tests/wcrtomb.c b/tests/wcrtomb.c index e14d8022..197b020e 100644 --- a/tests/wcrtomb.c +++ b/tests/wcrtomb.c @@ -1,5 +1,5 @@ /* Convert wide character to multibyte character. - Copyright (C) 2008-2022 Free Software Foundation, Inc. + Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify @@ -29,7 +29,7 @@ wcrtomb (char *s, wchar_t wc, mbstate_t *ps) #undef wcrtomb { /* This implementation of wcrtomb supports only stateless encodings. - ps must be in the initial state. */ + ps must be in an initial state. */ if (ps != NULL && !mbsinit (ps)) { errno = EINVAL; diff --git a/tests/wctob.c b/tests/wctob.c index 806d0fca..e1f27404 100644 --- a/tests/wctob.c +++ b/tests/wctob.c @@ -1,5 +1,5 @@ /* Convert wide character to unibyte character. - Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc. + Copyright (C) 2008, 2010-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify diff --git a/tests/wctomb-impl.h b/tests/wctomb-impl.h index 7a0995a0..ccec9ce0 100644 --- a/tests/wctomb-impl.h +++ b/tests/wctomb-impl.h @@ -1,5 +1,5 @@ /* Convert wide character to multibyte character. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify @@ -25,7 +25,7 @@ wctomb (char *s, wchar_t wc) mbstate_t state; size_t result; - memset (&state, 0, sizeof (mbstate_t)); + mbszero (&state); result = wcrtomb (s, wc, &state); if (result == (size_t)-1) return -1; diff --git a/tests/wctomb.c b/tests/wctomb.c index bbaf2e0e..694c95ca 100644 --- a/tests/wctomb.c +++ b/tests/wctomb.c @@ -1,5 +1,5 @@ /* Convert wide character to multibyte character. - Copyright (C) 2011-2022 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify diff --git a/tests/windows-thread.c b/tests/windows-thread.c index 5ae1e144..6a47a31f 100644 --- a/tests/windows-thread.c +++ b/tests/windows-thread.c @@ -1,5 +1,5 @@ /* Creating and controlling threads (native Windows implementation). - Copyright (C) 2005-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/windows-thread.h b/tests/windows-thread.h index 76069771..154bdfae 100644 --- a/tests/windows-thread.h +++ b/tests/windows-thread.h @@ -1,5 +1,5 @@ /* Creating and controlling threads (native Windows implementation). - Copyright (C) 2005-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -20,6 +20,11 @@ #ifndef _WINDOWS_THREAD_H #define _WINDOWS_THREAD_H +/* This file uses _Noreturn. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> diff --git a/tests/windows-tls.c b/tests/windows-tls.c index b24a7d55..6b73074d 100644 --- a/tests/windows-tls.c +++ b/tests/windows-tls.c @@ -1,5 +1,5 @@ /* Thread-local storage (native Windows implementation). - Copyright (C) 2005-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/windows-tls.h b/tests/windows-tls.h index 0d2de560..d9393fe9 100644 --- a/tests/windows-tls.h +++ b/tests/windows-tls.h @@ -1,5 +1,5 @@ /* Thread-local storage (native Windows implementation). - Copyright (C) 2005-2022 Free Software Foundation, Inc. + Copyright (C) 2005-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as diff --git a/tests/xalloc-die.c b/tests/xalloc-die.c index 5b947f10..c053c7a8 100644 --- a/tests/xalloc-die.c +++ b/tests/xalloc-die.c @@ -1,6 +1,6 @@ /* Report a memory allocation failure and exit. - Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2022 Free Software + Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -22,7 +22,7 @@ #include <stdlib.h> -#include "error.h" +#include <error.h> #include "exitfail.h" #include "gettext.h" diff --git a/tests/xalloc.h b/tests/xalloc.h index 01a9eec8..75a5db30 100644 --- a/tests/xalloc.h +++ b/tests/xalloc.h @@ -1,6 +1,6 @@ /* xalloc.h -- malloc with out-of-memory checking - Copyright (C) 1990-2000, 2003-2004, 2006-2022 Free Software Foundation, Inc. + Copyright (C) 1990-2000, 2003-2004, 2006-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,13 @@ #ifndef XALLOC_H_ #define XALLOC_H_ +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn, + _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_MALLOC, + _GL_ATTRIBUTE_RETURNS_NONNULL. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + #include <stddef.h> #include <stdlib.h> @@ -25,9 +32,6 @@ # include "idx.h" #endif -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif _GL_INLINE_HEADER_BEGIN #ifndef XALLOC_INLINE # define XALLOC_INLINE _GL_INLINE @@ -46,7 +50,7 @@ extern "C" { or by using gnulib's xalloc-die module. This is the function to call when one wants the program to die because of a memory allocation failure. */ -/*extern*/ _Noreturn void xalloc_die (void); +_Noreturn void xalloc_die (void); #endif /* GNULIB_XALLOC_DIE */ diff --git a/tests/xmalloc.c b/tests/xmalloc.c index 84cdf1f2..82e54ef1 100644 --- a/tests/xmalloc.c +++ b/tests/xmalloc.c @@ -1,6 +1,6 @@ /* xmalloc.c -- malloc with out of memory checking - Copyright (C) 1990-2000, 2002-2006, 2008-2022 Free Software Foundation, Inc. + Copyright (C) 1990-2000, 2002-2006, 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/tests/zerosize-ptr.h b/tests/zerosize-ptr.h index 990b51cf..90ab26f9 100644 --- a/tests/zerosize-ptr.h +++ b/tests/zerosize-ptr.h @@ -1,5 +1,5 @@ /* Return a pointer to a zero-size object in memory. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by |